Принудительно отображать полосы прокрутки в ListView?
Фон: Большинство из нас знаетSysListView32
общий контроль и эквивалентная оболочкаListView
класс, предоставляемый.NET Framework, Небольшая глубина в его внутренностях показывает, что полосы прокрутки, которые это обеспечивает для прокрутки его содержания,НЕ контролирует себя, но управляютсяSysListView32
контроль.
Цель: Всегда рисовать полосы прокрутки, даже если у него нетListViewItems
отображать или имеет очень мало таких, что полосы прокрутки не нужны в любом случае; вроде как подражаяRichTextBox
класс с егоScrollBars
свойство установлено вForcedBoth
, Или вроде какListBox
:
Проблемы):
.СЕТЬ имеетНЕТ сахар вообще для полос прокрутки в пределахListView
.В документации Win32 не указано, когдапоказать спрятать и / иливключить выключить скроллбары.Мой обходной путь (ы):
override
WndProc
в производном классе и обрабатывать егоWM_HSCROLL
а такжеWM_VSCROLL
сообщения согласно шагам 2 и 3.Вызовbase.WndProc
выполнить фактически требуемую обработку функции прокрутки.Создайте метод какWmScroll
и делатьмой обработка на нем немедленноafter
base.WndProc
вернулся.Это состоит из вызова p / invokeGetScrollInfo
, Определите, действительно ли нужна полоса прокрутки. Если это не так, позвонитеShowScrollBar
а такжеEnableScrollBar
с необходимыми значениями для рисования визуально отключенных полос прокрутки.Проблемы с обходным решением:
Это едва работает. Полосы прокрутки отображаются и отключены, но похожи наWindows Classic Theme.Он скрывает кнопки свертки каждогоListViewGroup
, делая их бесполезными!Описательное изображение:
Долгожданный актуальный вопрос:
Как заставить полосы прокрутки всегда быть Visible
в пределах ListView
независимо от количества ListViewItems
и отключите их, если они не нужны, при этом избегая просчета размера (для отображения кнопок свертывания ListViewGroup
s) а тема ухудшения?
Ответы без кода и ответы с кодом вC #, VB.NET а такжеC ++ / CLR Добро пожаловать Если вы публикуете код на любом другом языке, поддерживаемом .NET, оставьте также ссылку на веб-сайт преобразования кода, который я могу использовать, если код кажется непонятным.