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.