it-swarm.com.de

Wie kann der Benutzer Elemente in einer ComboBox hinzufügen und bearbeiten? (WinForms)

In meiner WinForms-Anwendung gibt es eine ComboBox mit Standardwerten. Der Benutzer sollte in der Lage sein, Elemente zur ComboBox hinzuzufügen oder vorhandene Elemente umzubenennen.

Ich möchte, dass das Design einfach ist. Dies war mein erster Ansatz:

  • Wenn der Benutzer etwas in die ComboBox eingibt und die Eingabetaste drückt und das Element vorhanden ist, wählen Sie es aus. Wenn das Element nicht vorhanden ist, fügen Sie es hinzu.

  • Wenn die ComboBox leer ist, wenn der Benutzer die Eingabetaste drückt, löschen Sie das Element am aktuellen Index.

Dies funktionierte in Ordnung, abgesehen von diesen beiden Problemen:

  1. Da es sich um eine benutzerdefinierte Benutzeroberfläche handelt, ist die Funktionalität nicht intuitiv.

  2. Wenn der Benutzer ein Element aus der ComboBox löscht und danach Elemente vorhanden sind, werden deren Indizes entsprechend angepasst. Grundsätzlich wird jeder Artikelindex nach diesem Artikel heruntergestoßen. 1. Dies ist schlecht, da der Index eines Artikels nach dem Hinzufügen nicht geändert werden sollte, da andere Dienste davon abhängen können. Grundsätzlich sollten Gegenstände nicht entfernt werden dürfen. Nur umbenannt. Möglicherweise zu leeren, wenn sie nicht mehr benötigt werden.

Die einzige wirkliche Lösung, die ich mir vorstellen kann, ist ein separater Dialog, aber ich kann mir keinen richtigen Entwurf für einen vorstellen.

Hier ist ein Beispiel für die erste Implementierung, an die man denken würde:

  1. Lassen Sie einen Menüpunkt einen Dialog mit dem Zweck öffnen, Elemente der ComboBox hinzuzufügen oder umzubenennen.

  2. Haben Sie eine TextBox für jedes Element in der ComboBox in diesem Dialogfenster. Wenn die letzte TextBox nicht leer ist, fügen Sie eine weitere hinzu (oder klicken Sie auf eine Schaltfläche, um eine weitere TextBox hinzuzufügen).

Ich nehme an, dieser Ansatz ist in Ordnung, aber ich mag ihn aus mehreren Gründen nicht.

  1. Wenn der Benutzer viele Elemente in der ComboBox hat, ist das Dialogfenster sehr groß oder erfordert eine Bildlaufleiste.

  2. Dieser Ansatz erfordert einen Menüpunkt, ein entsprechendes Dialogfenster und eine potenziell große Anzahl dynamischer Steuerelemente.

Ich habe versucht, einen besseren Weg zu finden, um dies zu erreichen, aber ich habe kein Glück.

6
Andrew Pollack

Es scheint, dass Sie ComboBox verwenden, weil es nicht erstellt wurde. ComboBox speichert eine feste Liste von Elementen in select. Wenn Sie diese Liste bearbeiten müssen, verwenden Sie ein getrenntes Formular, um Elemente zu bearbeiten. Es wäre intuitiver, Vertrauen. Andernfalls verwenden Sie bitte beispielsweise das Raster. Es ist mehr "bearbeitbar".

1
igor

Was Sie suchen, ist (glaube ich) ein automatisch vervollständigtes Textfeld.

Auf diese Weise kann der Benutzer überhaupt Text hinzufügen, vergleicht die Eingabe jedoch mit einer vordefinierten Liste und kann dann eines der Elemente aus dieser Liste auswählen. Möglicherweise wird hier angezeigt, wo der Benutzer einen Staat oder ein Land eingeben muss.

In Ihrem Fall möchten Sie alle Eingaben, die noch nicht in der Liste enthalten sind, zur Liste hinzufügen - was möglich ist.

Ihre Anforderung zum Löschen ist ebenfalls möglich. Beachten Sie jedoch, dass in Outlook ähnliche Funktionen zum Eingeben von E-Mail-Empfängern verwendet werden Shift+Delete Gegenstände entfernen.

Dieser Blog-Beitrag enthält ein Beispiel zum Erstellen eines solchen in WinForms. Ich werde den Code hier nicht wiederholen, da er nicht notwendig ist.

0
ChrisF

Auch zu diesem späten Zeitpunkt ist dieser Beitrag noch nützlich. Um ein Element hinzuzufügen, das ein Benutzer dem ComboBox-Steuerelement eingegeben hat,

  1. Wählen Sie die ComboBox aus (wir befinden uns in Visual Studio im Entwurfsmodus).
  2. Zeigen Sie die Eigenschaften an.
  3. Wählen Sie die Ereignisansicht.
  4. Fügen Sie die KeyDown-Ereignismethode hinzu.
  5. überprüfen Sie in der Methode des KeyDown-Ereignisses den KeyEventArgs e.KeyCode. Wenn der Benutzer die Eingabetaste (Keys.Enter) drückt, prüfen Sie, ob sich das Element bereits in der Elementliste befindet:

    private void cmbUserNouns_KeyDown (Objektabsender, KeyEventArgs e) {

    zeichenfolge s = cmbUserNouns.Text;

    if (e.KeyCode == Keys.Enter)

    {

    // Wenn ein Element vorhanden ist, wählen Sie es aus. Wenn es nicht existiert, fügen Sie es hinzu.

    if (! cmbUserNouns.Items.Contains (s))

    {

    cmbUserNouns.Items.Add (s);

    }}

    }}

}}

Ich habe das gerade getestet und es scheint gut zu funktionieren!

0
Su Llewellyn