Как сделать 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;
invertigo
источник
33

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

LZara
источник
2

COMBOBOXID.DropDownStyle = ComboBoxStyle.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;
}
Диого Родригес
источник