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 ListViewGroups) 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.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage