C combobox запретить редактирование

Типа как ReadOnly в компонентах TEdit

Если поставить стиль csDropDownList то user может
изменить находящееся в нем текущее значение, на другую строку.
если поставить Enabled = false, то все Ок, за исключением
того что текст становиться серым и плохо читаемым.

Можно разместить ComboBox например на Panel
и ее сделать недоступной, но и этот вариант не подходит,
на форме их много и вперемешку те, что можно изменять
и те, что нельзя.

У меня есть некоторые элементы в ComboBox (WinForms с C#). Я хочу, чтобы их содержимое было статичным, чтобы пользователь не мог изменять значения внутри при запуске приложения. Я также не хочу, чтобы пользователь добавлял новые значения в ComboBox

3 ответов

используйте свойство ComboStyle:

это еще один метод, который я использую, потому что изменение DropDownSyle to DropDownList заставляет его выглядеть 3D, а иногда его просто уродливо.

вы можете предотвратить ввод пользователя, обработав KeyPress событие ComboBox, как это.

Yow может изменить стиль DropDownStyle в свойствах на DropDownList. Это не покажет текстовое поле для фильтра.

Помогите написать процедурку которая бы проверяла текст введенный в комбобкс и если у комбобкс.items нет совпадений с текстом то запрещала бы ввод. Попробовал реализовать так.

Но что у комбобокса становится странное поведение (

Ну заполняешь ты свой list совпадениями при каждом нажатии клавиши, и что дальше? Явно не хватает Combo.Items := list.

Добавлено позднее:
А ввобще я бы сделал через OnKeyDown и блокировкой Key := #0.

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

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

Читайте также:  Msi geforce p104 100 miner 4g

Например я ввожу в combobox
1 — это текст должен ввестись так как 1 в списке есть
12 — это текст должен ввестись так как 12 в списке есть
112 — символ после 11 не должен ввестись так как совпадений в тексте нет

Цитата (MrDmitry @ 4.4.2014, 16:07 )
Вы не поняли что я хочу.

Я понял что ты хочешь. Еще я вижу что ты уже написал. Даже если допустить, что я не разобрался, тогда объясни мне что делает с твоем коде list?

Только не забудь предусмотреть дополнительную обработку нужных клавиш (Delete и т.п.)

Цитата (Poseidon @ 4.4.2014, 21:38)
Цитата (MrDmitry @ 4.4.2014, 16:07 )
Вы не поняли что я хочу.

Я понял что ты хочешь. Еще я вижу что ты уже написал. Даже если допустить, что я не разобрался, тогда объясни мне что делает с твоем коде list?

Только не забудь предусмотреть дополнительную обработку нужных клавиш (BackSpace и т.п.)

У меня была не удачная реализация )) По моей логике должно было происходить так.
В list заносятся все значения от комбобокса в которых нашлись совпадения с введенной стройкой, соответственно если list не пустой, то продолжаем ввод, если пустой, то затираем последний введенный символ(не позволяем вводить новый) но вот логика компилятора(да и вообще логика) со мной не согласились ))

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