Как мне заставить TCheckListBox прокручиваться вертикально?

StackOverflow https://stackoverflow.com/questions/2293085

Вопрос

У меня есть поле для проверки в форме.Его свойству 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 определяет", чтобы найти соответствующий фрагмент текста.)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top