Wie kann ich eine ComboBox in .NET nicht bearbeitbar machen?


205

Ich möchte eine "Nur-Auswahl" haben ComboBox, die eine Liste von Elementen bereitstellt, aus denen der Benutzer auswählen kann. Die Eingabe sollte im Textbereich des ComboBoxSteuerelements deaktiviert sein .

Mein anfängliches Googeln ergab einen übermäßig komplexen, fehlgeleiteten Vorschlag, das KeyPressEreignis festzuhalten .

Antworten:


378

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

stateComboBox.DropDownStyle = ComboBoxStyle.DropDownList;

Link zur Dokumentation für die ComboBox DropDownStyle-Eigenschaft in MSDN.


8
Eine Sache, die Sie beachten sollten, bedeutet, dass Sie die TextEigenschaft nicht mehr programmgesteuert aktualisieren können. Sie wurde verwendet, um eine Standardnachricht mitComboBox.SelectedIndex = -1;
Lankymart

Gibt es eine Möglichkeit, dies über die GUI für Visual C # zu tun, ohne es im Code bearbeiten zu müssen? Es scheint, als wäre ein 'Standardwert' eine normale Sache, die eingerichtet werden soll
muzzlator

6
Wie vermeide ich das graue Aussehen?
Anders Lindén

2
@ AndersLindén hat die Eigenschaft FlatStyle auf Flat gesetzt.
Xam

@Xam Wohin geht dann die Grenze? Wenn ich ein bisschen google, muss ich anscheinend selbst zeichnen, damit es akzeptabel aussieht.
Anders Lindén

67

Um eine Visual Studio-GUI-Referenz hinzuzufügen, finden Sie die DropDownStyleOptionen unter den Eigenschaften der ausgewählten ComboBox:

Geben Sie hier die Bildbeschreibung ein

Dadurch wird die in der ersten Antwort erwähnte Zeile automatisch zu Form.Designer.cs hinzugefügt InitializeComponent(), wie folgt :

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

33

Bleiben Sie in Ihrer ComboBox und suchen Sie die DropDropStyle-Eigenschaft im Eigenschaftenfenster und wählen Sie dann DropDownList .



1

Gehen Sie folgendermaßen vor, um nach der Auswahl weiterhin Daten in der Eingabe anzuzeigen:

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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.