Jak sprawić, by ComboBox nie był edytowalny w .NET?

205

Chcę mieć opcję „tylko do wyboru”, ComboBoxktóra zawiera listę elementów do wyboru przez użytkownika. Pisanie powinno być wyłączone w części tekstowej ComboBoxkontrolki.

Moje początkowe googlowanie przyniosło zbyt złożoną, błędną sugestię uchwycenia KeyPresszdarzenia.

Cory Engebretson
źródło

Odpowiedzi:

378

Aby część tekstowa ComboBox nie była edytowalna, ustaw właściwość DropDownStyle na „DropDownList”. ComboBox jest teraz zasadniczo tylko do wyboru dla użytkownika. Możesz to zrobić w projektancie Visual Studio lub w języku C #:

stateComboBox.DropDownStyle = ComboBoxStyle.DropDownList;

Link do dokumentacji właściwości ComboBox DropDownStyle w witrynie MSDN.

Cory Engebretson
źródło
8
Jedną z rzeczy, o których należy pamiętać, jest to, że nie można już Textprogramowo aktualizować właściwości, było użycie jej do wyświetlenia domyślnego komunikatu przy użyciuComboBox.SelectedIndex = -1;
Lankymart,
Czy można to zrobić za pomocą GUI dla Visual C # bez konieczności edycji w kodzie? Wygląda na to, że „wartością domyślną” byłoby normalne ustawienie
muzzlator
6
Jak uniknąć szarego wyglądu?
Anders Lindén
2
@ AndersLindén ustaw właściwość FlatStyle na Flat.
Xam
@Xam Więc gdzie idzie granica? Kiedy google trochę, wydaje się, że muszę zrobić rysunek, aby wyglądał akceptowalnie.
Anders Lindén
67

Aby dodać odwołanie do GUI Visual Studio, możesz znaleźć DropDownStyleopcje pod Właściwościami wybranego ComboBox:

wprowadź opis zdjęcia tutaj

Który automatycznie doda wiersz wymieniony w pierwszej odpowiedzi do Form.Designer.cs InitializeComponent(), tak:

this.comboBoxBatch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
invertigo
źródło
33

Pozostań na ComboBox i przeszukaj właściwość DropDropStyle w oknie właściwości, a następnie wybierz DropDownList .

LZara
źródło
2

COMBOBOXID.DropDownStyle = ComboBoxStyle.DropDownList;

Abhishek Jaiswal
źródło
1

Aby kontynuować wyświetlanie danych na wejściu po wybraniu, wykonaj następujące czynności:

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;
}
Diogo Rodrigues
źródło