bei einer Combobox klappen 2 Listen beim Klicken auf den Pfeil und Tastatureingaben auf

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Schoofi.

    bei einer Combobox klappen 2 Listen beim Klicken auf den Pfeil und Tastatureingaben auf

    Ich habe eine Combobox, die auf

    VB.NET-Quellcode

    1. ​Dropdownstyle=dropdown
    2. autocompletemode=suggest
    eingestellt ist

    Diese ist über an eine Bindingsource an eine Datenbanktabelle gebunden.

    Wenn ich auf den Pfeil klicke erscheint wie erwartet eine Auswahlliste.
    Wenn ich dann in der Combobox zu schreiben anfange , erscheint eine weitere Liste in der bereits angezeigten Liste.
    Darin kann ich zwar auswählen, aber den ausgewählten Wert nicht auswerten.
    Ansonsten funktioniert das Ereignis Text_Changed bei Auswahl mit der Maus und beim Schreiben in der Combobox, wenn der Pfeil nicht angeklickt wurde.
    Nur Pfeil anklicken und dann schreiben führt zu einem undefinierten Ergebnis.

    Woran kann das liegen und wie kann ich das beheben ?
    Ich hab das bei mir so gelöst das wenn ich den Dropdown verwende, der AutoCompleteModus ausgeschaltet wird.
    Eine andere lösung wäre nur die Texteingabe im DropDown zu verbieten.

    VB.NET-Quellcode

    1. Private Sub cbSuche_DropDown(sender As System.Object, e As System.EventArgs) Handles cbSuche.DropDown
    2. 'AutoComplete bei geöffneter Dropdownlist abschalten
    3. cbSuche.AutoCompleteMode = AutoCompleteMode.None
    4. End Sub
    5. Private Sub cbSuche_DropDownClosed(sender As System.Object, e As System.EventArgs) Handles cbSuche.DropDownClosed
    6. 'AutoComplete wieder anschalten
    7. cbSuche.AutoCompleteMode = AutoCompleteMode.SuggestAppend
    8. End Sub

    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    @Schoofi aber das ist ja mit meinem Code möglich.
    Was einfach passiert ist, wenn du das DropDown öffnest wird die Suggestbox geschlossen. Damit hast du nicht mehr beide Fenster auf. Wenn du anschließend weiter Tipps, schließt sich das DropDown und die SuggestBox steht wieder zur Verfügung.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Danke, sah im ersten Moment ganz gut aus, nur dummerweise gehen mir bei

    VB.NET-Quellcode

    1. ​Private Sub cbSuche_DropDownClosed(sender As System.Object, e As System.EventArgs) Handles cbSuche.DropDownClosed
    2. 'AutoComplete wieder anschalten
    3. cbSuche.AutoCompleteMode = AutoCompleteMode.SuggestAppend
    4. End Sub


    die selektierten Werte verloren.
    Über welches Ereignis wertest Du aus ?
    Ausprobieren kann ich es dann leider erst wieder in einer Woche, habe erstmal eine Woche Urlaub.
    @Schoofi
    Das habe ich ganz "hässlich" mit einen cbSuche_SelectedIndexChanged(sender, e) gelöst. Ich hatte das nicht mit rein geschrieben weil ich die Lösung nicht gut finde.
    Vielleicht gibt es ja noch eine "saubere" Lösung.
    There is no CLOUD - just other people's computers

    Q: Why do JAVA developers wear glasses?
    A: Because they can't C#

    Daily prayer:
    "Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
    Also ich würde sagen: Entweder oder.
    Entweder du nutzt die Combobox als Combobox, ohne AutoCompetion.

    Oder du nutzt eine Textbox mit AutoCompletion.
    Letzteres ist die bessere Alternative, wenn man dem User freistellen will, auch neue dinge einzutragen.

    Hingegen will man bewusst nur bestimmte Optionen zur Auswahl stellen, so nehme man Combobox, und zwar mit DropDownStyle.DropDownList

    Jetzt habe ich es geschafft, das sich die Combobox so verhält, wie ich es gern hätte.
    Leider geht es wirklich nur mit Krampf.
    Bei SelectionChangeCommitted sind leider noch nicht alle Werte umgestellt.
    Also bleibt scheinbar wirklich nur folgende Vorgehensweise.
    Handler bei SelectIndexChanged entfernen, das er nicht schon beim Formular öffnen feuert.
    Beim Laden wieder hinzufügen.
    Beim Auftreten von SelectedIndexChanged wieder entfernen, um zu verhindern, das es bei .AutoCompleteMode = AutoCompleteMode.SuggestAppend wieder ausgelöst wird.
    Danach wieder aktivieren.

    VB.NET-Quellcode

    1. Private Sub Form2_Load(sender As Object, e As EventArgs) Handles Me.Load
    2. AddHandler cboNutzername.SelectedIndexChanged, AddressOf cboNutzername_SelectedIndexChanged
    3. End Sub
    4. Private Sub cboNutzername_DropDown(sender As System.Object, e As System.EventArgs) Handles cboNutzername.DropDown
    5. 'AutoComplete bei geöffneter Dropdownlist abschalten
    6. cboNutzername.AutoCompleteMode = AutoCompleteMode.None
    7. End Sub
    8. Private Sub cboNutzername_SelectedIndexChanged(sender As Object, e As EventArgs)
    9. With Me.cboNutzername
    10. Dim intID_Nutzername As Integer
    11. RemoveHandler .SelectedIndexChanged, AddressOf cboNutzername_SelectedIndexChanged 'verhindert das AutoCompleteMode.Suggest TextChanged nochmal aufruft
    12. If .SelectedIndex > -1 Then
    13. Dim dtrowNutzer As dsRechnerliste_be.tbl_NutzerRow = DirectCast(DirectCast(.SelectedItem, DataRowView).Row, dsRechnerliste_be.tbl_NutzerRow)
    14. 'oder
    15. Me.bsNutzer.Position = Me.bsNutzer.Find(Rechnerliste.tbl_Nutzer.ID_NutzerColumn.ColumnName, CInt(Me.cboNutzername.SelectedValue))
    16. .AutoCompleteMode = AutoCompleteMode.SuggestAppend
    17. AddHandler .SelectedIndexChanged, AddressOf cboNutzername_SelectedIndexChanged
    18. End If
    19. End With
    20. End Sub


    Bei einer Combobox mit 170 Eintragungen ist es schon hilfreich, wenn man durch die Liste blättern kann, aber auch durch Eingabe der ersten Buchstaben, sich in der Liste positionieren kann.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Schoofi“ ()