2008-09-17 19 views
179

Ich möchte eine "nur Auswahl" ComboBox, die eine Liste von Elementen für den Benutzer zur Auswahl bietet. Die Eingabe sollte im Textabschnitt des Steuerelements ComboBox deaktiviert werden.Wie kann ich eine ComboBox in .NET nicht editierbar machen?

Mein anfängliches googling dieses ergab einen übermäßig komplizierten, fehlgeleiteten Vorschlag, das KeyPress Ereignis festzuhalten.

Antwort

330

Um den Textteil einer ComboBox nicht editierbar zu machen, setzen Sie die DropDownStyle-Eigenschaft auf "DropDownList". Die ComboBox ist jetzt im Wesentlichen nur für den Benutzer ausgewählt. Sie können in der Visual Studio-Designer tun dies, oder in C# wie folgt aus:

stateComboBox.DropDownStyle = ComboBoxStyle.DropDownList; 

Link zur Dokumentation für die ComboBox DropDownStyle property auf MSDN.

+6

Eine Sache zu beachten tun dies bedeutet, dass Sie nicht mehr die 'Text' Eigenschaft aktualisieren programmically kann, wurde mit ihm ein zeigen, Standardmeldung mit 'ComboBox.SelectedIndex = -1;' – Lankymart

+0

Gibt es eine Möglichkeit, dies über die GUI für Visual C# zu tun, ohne es im Code zu bearbeiten? Scheint wie ein "Standardwert" wäre eine normale Sache zu wollen – muzzlator

+0

@muzzlator siehe meine Antwort unter http://stackoverflow.com/a/26005210/1241244 – invertigo

19

Bleiben Sie auf Ihrer ComboBox und suchen Sie die DropDropStyle -Eigenschaft aus dem Eigenschaftenfenster und wählen Sie DropDownList.

51

Um eine Visual Studio GUI Referenz hinzufügen, können Sie die DropDownStyle Optionen unter den Eigenschaften des ausgewählten ComboBox finden:

enter image description here

Welche wird automatisch fügen Sie das Formular der Zeilen in der ersten Antwort erwähnt. Designer.cs InitializeComponent(), etwa so:

this.comboBoxBatch.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 
2

COMBOBOXID.DropDownStyle = ComboBoxStyle.DropDownList;

1

weiterhin Um Daten in den Eingang nach der Auswahl, tun so die Anzeige:

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; 
} 
Verwandte Themen