Introduction
This article show how to customize a
System.Windows.Forms.Panel
or a
System.Windows.Forms.UserControl
to use effectively scrollbars (
ScrollProperties
) without setting the
AutoScroll
property (you must not set
AutoScroll=true
). In most cases, you can use the
AutoScroll = true
. But in some cases, when you must work with two panels and separate
Scrollbar
s, then you can use this
ManualScrollPanel
control. For example: if you will show 24 pictures just one by one on a scrollable panel, then you can set the Minimum of the
VScrollProperties
to
1
and the Maximum to
24
. You can change Enable or Visible property of each scrollbar of the panel, receive a scrolling event, and change and receive the positions of both scrollbars.
Background
The Codeproject article "
Customize a panel with Autoscroll property" by Manalee software gives the inspiration.
Using the Code
In your solution, add the file
ManualScrollPanel.cs to your C# project. Then you can change type of a panel in your project by the
ManualScrollPanel
type. Now you can set the
ScrollProperties
values to the
ManualScrollPanel
(Enabled, Minimum, Maximum, SmallChange, LargeChange, Value, Visible) like you want.
In the example with the Form, you can see how the scroll is working.
Explanations about code in the
ManualScrollPanel
class:
First you must create a new class that overrides the
System.Windows.Forms.Panel
. In the constructor code, you must set the protected properties
HScroll
and
VScroll
to
true
. It is not possible to do this later on. You also must override the
WndProc
function to receive API32 scrolling messages (
WM_HSCROLL
,
WM_VSCROLL
). These messages must not pass to the base class. In
WndProc
was done a calculation for the new scroll value. If there is a new value then the
ScrollEvent
of the
ManualScrollPanel
was thrown.
That's all, enjoy with it in the hope that it will be useful for you...
History
Version 1.0 (Initial Release): All described features implemented. If you need the mousewheel, you have to do extra stuff.