Как сделать ComboBox недоступным для редактирования в .NET?


205

Я хочу иметь «только для выбора», ComboBoxкоторый предоставляет список элементов для выбора пользователя. Печатание должно быть отключено в текстовой части элемента ComboBoxуправления.

Мое начальное приближение к этому оказалось слишком сложным, ошибочным предложением захватить KeyPressсобытие.

Ответы:


378

Чтобы сделать текстовую часть ComboBox недоступной для редактирования, установите для свойства DropDownStyle значение «DropDownList». ComboBox теперь по сути только для выбора для пользователя. Вы можете сделать это в конструкторе Visual Studio или в C # следующим образом:

stateComboBox.DropDownStyle = ComboBoxStyle.DropDownList;

Ссылка на документацию по свойству ComboBox DropDownStyle в MSDN.


8
Делая это, вы должны помнить одну вещь: вы больше не можете обновлять Textсвойство программно, используя его для отображения сообщения по умолчанию, используяComboBox.SelectedIndex = -1;
Lankymart

Есть ли способ сделать это через графический интерфейс для Visual C # без необходимости редактировать его в коде? Похоже, что «значение по умолчанию» было бы нормальным
решением

6
Как мне избежать появления серого?
Андерс Линден

2
@ AndersLindén устанавливает для свойства FlatStyle значение Flat.
Xam

@Xam Тогда где же проходит граница? Когда я немного гуглю, кажется, что я должен сделать рисунок сам, чтобы он выглядел приемлемым.
Андерс

67

Чтобы добавить ссылку на графический интерфейс Visual Studio, вы можете найти DropDownStyleпараметры в свойствах выбранного ComboBox:

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

Который автоматически добавит строку, упомянутую в первом ответе, в Form.Designer.cs InitializeComponent(), например так:

this.comboBoxBatch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

33

Оставайтесь в ComboBox и ищите свойство DropDropStyle в окне свойств, а затем выберите DropDownList .



1

Чтобы продолжить отображение данных на входе после выбора, сделайте так:

VB.NET
Private Sub ComboBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles ComboBox1.KeyPress
    e.Handled = True
End Sub



C#
Private void ComboBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    e.Handled = true;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.