Die Anzeige von Bildlaufleisten in einer ListView erzwingen?
Der Hintergrun: Die meisten von uns kennen dasSysListView32
Common Control und der entsprechende WrapperListView
Klasse zur Verfügung gestellt von der .NET Framework. Ein kleiner Einblick in die Interna zeigt, dass die Bildlaufleisten, mit denen der Inhalt gescrollt werden kann, @ sinNICH steuert sich selbst, werden aber vom @ verwaltSysListView32
Steuerung
Das Zie: Zeichne immer Bildlaufleisten, auch wenn sie kein @ habListViewItems
anzuzeigen oder hat nur sehr wenige, so dass ohnehin keine Bildlaufleisten benötigt werden; Art wie die @ NachahmuRichTextBox
Klasse mit seinemScrollBars
Eigenschaft auf @ gesetForcedBoth
. Oder irgendwie soListBox
:
Die Probleme:
.NET hatNEI Zucke überhaupt für Bildlaufleisten innerhalb einesListView
. Win32-Dokumentation gibt nicht an, wannAnzeigen Ausblende und / oderaktivieren deaktiviere Bildlaufleisten.Meine Problemumgehung (en):
override
dasWndProc
in einer abgeleiteten Klasse und behandeln ihreWM_HSCROLL
undWM_VSCROLL
Nachrichten gemäß Schritt 2 und 3.Anrufbase.WndProc
, um die tatsächlich erforderliche Verarbeitung der Bildlauffunktion durchzuführen.Erstelle eine Methode wieWmScroll
und TUmein Verarbeitung sofort daraufafter
base.WndProc
ist zurückgekommen Dies besteht aus einem Aufruf von p / invoke anGetScrollInfo
. Stellen Sie fest, ob eine Bildlaufleiste tatsächlich benötigt wird. Wenn es nicht ist, rufen SieShowScrollBar
undEnableScrollBar
mit den erforderlichen Werten, um sichtbar deaktivierte Bildlaufleisten zu zeichnen.Probleme mit der Problemumgehung:
Es funktioniert kaum. Die Bildlaufleisten werden angezeigt und sind deaktiviert, entsprechen jedoch denen unterWindows Classic Theme.Es verbirgt die Reduzierungsschaltflächen jedesListViewGroup
, macht sie unbrauchbar!Das beschreibende Bild:
ie lang erwartete eigentliche Fra:
Wie erzwinge ich, dass Bildlaufleisten immer @ sin Visible
innerhalb eine ListView
unabhängig von der Anzahl von ListViewItems
und deaktivieren Sie sie, wenn sie nicht erforderlich sind, und vermeiden Sie gleichzeitig Größenfehlberechnungen. (zum Anzeigen der Ausblendschaltflächen des ListViewGroup
s) und Thema Verschlechterung?
Antworten ohne Code und Antworten mit Code in C #, VB.NET undC ++ / CLR sind willkommen. Wenn Sie Code in einer anderen von .NET unterstützten Sprache veröffentlichen, hinterlassen Sie bitte auch einen Link zu einer Website zur Codekonvertierung, die ich möglicherweise verwende, wenn der Code unverständlich erscheint.