Как сделать вертикальную прокрутку TCheckListBox?

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

Дело в том, что, как эта форма выложена, было бы гораздо удобнее прокручивать вертикально. Но я не могу понять, как заставить коробку делать это. Я думал, что установка Columns в 1 должна работать, но это не так.

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

1 ответ

Решение

Вам нужно установить Columns до 0.

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

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

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

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

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

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

(Найдите "Стиль LBS_MULTICOLUMN указывает", чтобы найти соответствующий фрагмент текста.)

Другие вопросы по тегам