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.

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.


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;

33

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



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;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.