Як я можу зробити 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

Чи є спосіб зробити це через GUI для Visual C # без необхідності редагувати це в коді? Здається, що "значення за замовчуванням" було б нормальною справою, яку потрібно налаштувати
музикант

6
Як уникнути сірого вигляду?
Андерс Лінден

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

@Xam Тоді куди йде кордон? Коли трохи гуглиться, здається, що я повинен сам зробити креслення, щоб він виглядав прийнятним.
Anders Lindén

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.