The background: Most of us know the
SysListView32
common control and the equivalent wrapperListView
class provided by the .NET Framework. A little depth into its internals show that the scroll bars it provides for scrolling its contents are NOT controls themselves, but are managed by theSysListView32
control.The goal: Always draw scroll bars even if it has no
ListViewItems
to display or has very few such that no scroll bars are needed anyway; sort of like mimicking theRichTextBox
class with itsScrollBars
property set toForcedBoth
. Or kinda like thisListBox
:
The problem(s):
- .NET has NO sugar at all for scroll bars within a
ListView
. - Win32 documentation does not state when to show/hide and/or enable/disable scrollbars.
- .NET has NO sugar at all for scroll bars within a
My workaround(s):
override
theWndProc
in a derived class and handle itsWM_HSCROLL
andWM_VSCROLL
messages as per steps 2 and 3.- Call
base.WndProc
to do the actually required processing of the scroll functionality. - Create a method like
WmScroll
and do my processing on it immediatelyafter
base.WndProc
has returned. - This consists of a p/invoke call to
GetScrollInfo
. Determine if a scroll bar is actually needed. If it's not then callShowScrollBar
andEnableScrollBar
with required values to draw visibly disabled scroll bars.
Problems with the workaround:
- It barely works. The scroll bars are displayed and disabled but are like the ones under Windows Classic Theme.
- It hides the collapse buttons of each
ListViewGroup
, rendering them useless!
The descriptive image:
The long awaited actual question:
How do I force scroll bars to always be Visible
within a ListView
irrespective of the number of ListViewItems
and disable them if they are unnecessary, at the same time avoiding size miscalculation (to display collapse buttons of the ListViewGroup
s) and theme deterioration?
Answers without code, and answers with code in C#, VB.NET and C++/CLR are welcome. If you post code in any other language supported by .NET, please also leave a link to a code conversion website I may use if the code seems, uh, incomprehensible.