Как сделать отступ в combobox

Обновлено: 04.07.2024

Есть combobox и изображения-состояния для него.
Изображения-состояния:
Дефолтный док (defaultTX.jpg):

Нажатое (pressedTX.jpg):

При наведении мыши на док (rolloverTX.jpg):

Панель при раскрытом состоянии (panelTX.jpg):

На панели при выборе элемента (selectedTX.jpg):

И есть подгрузка стилей:

Вопрос - как заполнить qss файл, чтобы привязать изображения к состояниям ComboBox.

UPD [29.08.2020]

Важно уделить внимание именно панели, т.к. на текущий момент у меня получилось только это:

Я хочу выровнять свой текст в поле со списком, чтобы он отображался в центре combobox, скажите мне, как это сделать, также вы можете увидеть, что есть граница по умолчанию вокруг поля со списком, когда он находится в фокусе, как я могу удалить эту границу также Пожалуйста, решите мои две проблемы Спасибо

Это не поддерживается для ComboBox. Точные причины теряются в тумане времени, ComboBox существует с начала девяностых, но, безусловно, имеет какое-то отношение к неловкости получения текста в части текстового поля, чтобы выровняться с текстом в раскрывающемся списке. Пользовательский чертеж с DrawItem также не может его решить, что влияет только на внешний вид раскрывающихся элементов.

в качестве возможного обходного пути вы могли бы сделать что-то диковинное, например, заполнить элемент строки с пробелами, чтобы они посмотреть по центру. Вам понадобится TextRenderer.MeasureText (), чтобы выяснить, сколько пробелов добавить для каждого элемента.

"граница", о которой вы говорите, не является границей, это прямоугольник фокуса. Вы также не можете избавиться от этого, Windows отказывается позволить вам создать пользовательский интерфейс, который не будет показывать элемент управления с фокусом. Пользователи, которые предпочитают клавиатуру мыши, заботятся об этом. Нет обходного пути для этого.

фокус в том, чтобы установить DrawMode - свойство ComboBox to OwnerDrawFixed а также подписаться на его событие DrawItem .

ваше событие должно содержать следующий код:

ComboBox-Preview

чтобы выровнять элементы, которые вы можете просто заменить StringAlignment.Center С StringAlignment.Far .

задайте свойству 'RightToLeft' значение true. Он не меняет последовательность символов. Это только справедливо-оправдывает.

вы не можете сделать это в Windows form control специально поле со списком

вы можете сделать что-то подобное, добавив пробел перед членами дисплей в запросе

Свойство TextAlign указывает выравнивание текста в новых средствах управления. Чтение и написание byte.

Синтаксис

выражения. TextAlign

выражение Переменная, представляющие объект ComboBox.

Заметки

Свойство TextAlign использует следующие параметры.

Setting Visual Basic Описание
Общий 0 (По умолчанию) Текст выравнивается слева; цифры и даты совпадают справа.
Left 1 Текст, цифры и даты совпадают слева.
Center 2 Текст, цифры и даты находятся в центре.
Right 3 Текст, цифры и даты совпадают справа.
Distribute 4 Текст, номера и даты равномерно распределены.

Вы можете установить по умолчанию свойство TextAlign, используя стиль управления по умолчанию или свойство DefaultControl в Visual Basic.

Пример

В следующем примере текст в текстовом окне Адрес в форме Поставщики выравнивается справа.

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Компонент TComboBox сочетает в себе редактируемый список с возможностью прокрутки и выбора определенного пункта списка. Пользователь может выбрать какой-либо элемент из списка или ввести его непосредственно в поле редактирования.

Раскрывающийся список

Когда список находится в открытом состоянии, Windows рисует окно внизу списка с элементами, которые находятся внутри списка.

Свойство DropDownCount определяет максимальное количество элементов, которые будут отображаться в открытом списке.

Ширина открытого списка равна ширине поля ComboBox. Когда длина (или строка) превышает ширину ComboBox, элементы урезаются до ширины списка.

Компонент TComboBox не имеет свойства для расширения раскрывающегося окна списка.

Фиксированная ширина раскрывающегося поля ComboBox

Для размера окна, скажем, 200 пикселей, можно сделать так:

Это будет работать правильно, если только ширина пунктов раскрывающегося списка не будет превышать 200 пикселей.

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

Вот пример функции для расчета ширины раскрывающегося списка с учетом ширины его отдельных пунктов.

Для расчета ширины раскрывающегося списка используется ширина самой длинной строки.

Откуда вызывать процедуру ComboBox_AutoWidth?

Если Вы предварительно заполняете список во время разработки, то вызывать процедуру ComboBox_AutoWidt удобно при создании формы, в обработчике события OnCreate формы.

Если же Вы динамически заполняете список во время работы приложения, то вызывать процедуру ComboBox_AutoWidth можно внутри обработчика события OnDropDown ComboBox. Это событие происходит, когда Вы открываете раскрывающийся список.

Проверяем

Для проверки, поместите компонент TComboBox на форму и заполните его свойство Items словами различной длины. Затем пишем процедуру ComboBox_AutoWidth и вызываем ее в событии формы OnCreate.

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

Расширение списка влево!

Заметьте, что список расширяется вправо. Что же сделать, если ComboBox находится справа на форме, а поле со списком выходит за пределы окна?

Найденное решение - WM_CTLCOLORLISTBOX

Вот наш измененный WindowProc для ComboBox:

Ну и наконец, нужно разместить все это в обработчике события OnCreate формы:

Читайте также: