Как мне заставить TCheckListBox прокручиваться вертикально?
-
21-09-2019 - |
Вопрос
У меня есть поле для проверки в форме.Его свойству Columns присвоено значение 2, и если элементов больше, чем может поместиться на экране в двух столбцах, он помещает горизонтальную полосу прокрутки в нижнюю часть элемента управления.
Дело в том, что при таком расположении этой формы было бы гораздо удобнее прокручивать ее вертикально.Но, похоже, я не могу понять, как заставить коробку сделать это.Я думал, что установка столбцов равными 1 должна сработать, но это не так.
Кто-нибудь знает, как заставить TCheckListBox прокручиваться вертикально, а не горизонтально?
Решение
Вам нужно установить Columns
до 0.
Для всех положительных значений VCL отправляет LB_SETCOLUMNWIDTH
сообщение базовому элементу управления собственным списком, для параметра width которого задано значение клиентской ширины списка, деленное на количество столбцов.Элементы, которые не помещаются, начнут новый столбец с той же шириной столбца, поэтому горизонтальная полоса прокрутки станет видимой.
Если Columns
равно 0, тогда есть один столбец, который занимает всю ширину клиентского окна списка, и элементы, которые не помещаются, сделают видимой вертикальную полосу прокрутки и скроют горизонтальную полосу прокрутки.
Редактировать:
Кажется, существует неподдельный интерес к тому, что происходит, когда отрицательное значение используется для Columns
собственность.
Метод TCustomListBox.CreateParams()
устанавливает LBS_MULTICOLUMN
стиль окна списка в зависимости от Columns
свойство, отличное от 0.Для отрицательных значений установлен флаг стиля, но VCL не отправляет LB_SETCOLUMNWIDTH
сообщение, поэтому собственный элемент управления использует ширину столбца по умолчанию.Это так документированный быть:
в 15 раз больше средней ширины символа шрифта, используемого в окне списка.
(Выполните поиск по "Стиль LBS_MULTICOLUMN определяет", чтобы найти соответствующий фрагмент текста.)