Как я могу добавить горизонтальную полосу прокрутки в VBA ListBox - PullRequest
4 голосов
/ 08 мая 2009

Я хотел бы добавить горизонтальную полосу прокрутки к списку VBA.

Похоже, что встроенный ListBox не добавляет горизонтальную полосу прокрутки автоматически. У меня есть несколько полей, содержимое которых превышает ширину ListBox и, таким образом, не читается пользователем.

Я нашел этой статьи , однако код завершается ошибкой из-за доступа к hwnd ListBox (который, по-видимому, недоступен в VBA). Я бы предпочел не писать нативную DLL для этого, так как подозреваю, что есть лучший способ.

Есть идеи, как добавить горизонтальную полосу прокрутки в список VBA ListBox?

Я открыт для идеи использования альтернативного элемента управления вместо того, чтобы заставить его работать конкретно с ListBox.

Ответы [ 6 ]

4 голосов
/ 09 мая 2009

Вы пробовали свойство ColumnWidths? У меня есть список с горизонтальной полосой прокрутки. Мне просто нужно было добавить свойство ColumnWidths.

Например, у меня есть

м e.Listbox1.Columnwidts ="0.5 in;0.2 in;1.5 in;0.75 in;0.5 in"

3 голосов
/ 22 мая 2009

Access автоматически добавит горизонтальную полосу прокрутки, если ширина столбца превысит ширину списка. ОДНАКО, если вы используете несколько столбцов, первый столбец не может быть установлен на 0. У вас должно быть хотя бы какое-то значение, даже если оно всего 0,1 ". Надеюсь, это поможет.

3 голосов
/ 08 мая 2009

Если я что-то не упустил, список VBA автоматически получит горизонтальную полосу прокрутки, если общая сумма его свойства ColumnWidths превысит его собственную ширину.

Я не знаю каких-либо свойств, которые влияют на это поведение, т. Е. Я не знаю, как заставить или отключить отображение горизонтальной полосы прокрутки.

0 голосов
/ 06 октября 2018

В Visual Studio 2017 вы можете щелкнуть поле списка, затем перейти на панель свойств и затем (прокрутить вниз) найти свойство HorizontailScrollbar. По умолчанию это свойство имеет значение false, поэтому следует установить значение true.

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

Надеюсь, это поможет.

0 голосов
/ 08 июня 2009

Дескриптор списка можно получить следующим образом: -

Dim ListHwnd As Integer lstboxName.SetFocus ListHwnd = GetFocus ()

Используйте этот ListHwnd в качестве первого параметра функции sendmessage ...

Нам нужно предоставить объявление ниже, так как функция GetFocus по умолчанию отсутствует в VBA

Закрытое объявление функции GetFocus Lib "user32" () как целое число

0 голосов
/ 08 мая 2009

В этой статье единственная причина, по которой он получает ScaleMode, - установить ширину горизонтальной полосы прокрутки. Тебе не обязательно это делать.

SendMessageByNum List1.hwnd, LB_SETHORIZONTALEXTENT, 800, 0

, где 800 - ширина пикселя, которую вы хотите, чтобы окно списка могло прокручиваться вправо.

Вам все еще понадобится hWnd. Лучше всего использовать внешнюю DLL (написанную на VB), которая может перечислять через дочерние окна вашего процесса, пока не найдет класс окон для списка (вам нужно будет найти какой-то способ уникальной идентификации его родителя, например окно название / текст или что-то). Та же самая DLL может также выполнить вышеупомянутый вызов SendMessage, чтобы установить горизонтальный текстовый экстент (возможно, также он может измерить ширину содержащихся элементов списка).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...