Как сделать вертикальную прокрутку TCheckListBox? - PullRequest
4 голосов
/ 19 февраля 2010

У меня есть TCheckListBox на форме.Его свойство «Столбцы» имеет значение 2, и если в двух столбцах больше элементов, которые могут уместиться на экране, он помещает горизонтальную полосу прокрутки в нижней части элемента управления.выложил, было бы гораздо удобнее прокручивать вертикально.Но я не могу понять, как заставить коробку делать это.Я думал, что установка Columns в 1 должна работать, но это не так.

Кто-нибудь знает, как сделать прокрутку TCheckListBox вертикально вместо горизонтальной?

1 Ответ

6 голосов
/ 19 февраля 2010

Вам необходимо установить Columns в 0.

Для всех положительных значений VCL отправляет сообщение LB_SETCOLUMNWIDTH в базовый собственный элемент управления списка, с параметром width, равным ширине клиента списка.делится на количество столбцов.Элементы, которые не помещаются, начнут новый столбец с той же шириной столбца, поэтому горизонтальная полоса прокрутки станет видимой.

Если Columns равен 0, то есть один столбец, который охватывает всю ширину клиентаПоле со списком и элементы, которые не помещаются, сделают вертикальную полосу прокрутки видимой и скроют горизонтальную полосу прокрутки.

Редактировать:

Похоже, есть подлинный интерес в том, чтопроисходит, когда для свойства Columns используется отрицательное значение.

Метод TCustomListBox.CreateParams() устанавливает стиль списка LBS_MULTICOLUMN в зависимости от отличия свойства Columns от 0. Для отрицательных значений стильустановлен флаг, но VCL не отправляет сообщение LB_SETCOLUMNWIDTH, поэтому собственный элемент управления использует ширину столбца по умолчанию. задокументировано :

15, умноженное на среднюю ширину символа для шрифта, используемого списком.

(Искать "TheСтиль LBS_MULTICOLUMN указывает «найти соответствующий фрагмент текста.)

...