Mausklicks und Tastatur-Ereignisse in datengebundener ComboBox - ich krieg's in VB2015 nicht gescheit hin!

  • VB.NET

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

    Mausklicks und Tastatur-Ereignisse in datengebundener ComboBox - ich krieg's in VB2015 nicht gescheit hin!

    Das Setting ist einfach und war unter VB6 ganz einfach mit dem Click-Event zu lösen.

    Ich wähle in einer datengebundenen ComboBox ein Stichwort aus. Durch den Event öffnet sich ebenfalls ein datengebundenes ListView mit den entsprechenden Einträgen zu diesem Stichwort. Die ComboBox soll wie folgt bedienbar sein:
    1. Ich schreibe zwei/drei Buchstaben in den ComboBox.Text, öffne mit ALT & Pfeil-nach-unten Box und wähle mit den Pfeiltasten das exakte Stichwort aus und bestätige mit ENTER:
    Private Sub coResStw_KeyDown(sender As Object, e As KeyEventArgs) Handles coResStw.KeyDown
    If e.KeyData = Keys.Enter Then coResStwSub()
    End Sub

    2. Nun möchte ich ganz einfach auch mit der Mause in der Auswahlliste der ComboBox ein Stichwort aus der Liste auswählen
    Ich finde dazu jedoch keinen spezfischen Mouse-Event für die Liste der ComboBox! Wenn ich folgenden Event auswerte. Der Click-Event erscheint bei jedem Click irgendwo in die ComboBox. Auch MouseDown kann ich nicht lokalisieren. Naheliegend wäre der SelectetdIndexChange:
    Private Sub coResStw_SelectedIndexChanged(sender As Object, e As EventArgs) Handles coResStw.SelectedIndexChanged
    coResStwSub()
    End Sub
    Doch damit wird auch jede Pfeil-Tasten-Bewegung als Event ausgewertet.

    Kann mir da jemand weiterhelfen? Herzlichen Dank!
    Gar nicht so einfach zu verstehen was du möchtest... ;)

    Wenn du deine ComboBox z.B. im FormLoad-Event mit Daten befüllst, kannst du diese danach mit der Maus ganz normal auswählen. Da benötigst du gar kein Event.

    Soll irgend was passieren, nachdem du ein (anderes) Item der ComboBox ausgewählt hast, kannst du das SelectedIndexChanged-Event verwenden. Das feuert sobald u ein Item ausgewählt hast.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    Danke für eure Antworten. Was bedeutet:
    Abonniere dir den SelectedIndexChanged Event der Combobox. Dann kannst du dir auch den KeyDown event sparen.
    Wie abonniere ich einen Event?

    Ich habe oben schon beschrieben, dass der SelectedIndexChanged Event bei jeder Pfeil-Tasten-Bewegung einen Event auslöst, den ich nicht will. Ich will mit den Pfeiltasten ein Stichworte anwählen und dann erst mit ENTER den Event auslösen. Das geht aber nicht, wenn der SelectedIndexChanged Event ausgewertet wird. Genau das Gleiche geschieht bei den anderen Events: SelectionChangeCommited und SelectedValueChanged.
    Du gehst auf die Eigenschaften des Controlls und dann oben das Blitz-Symbol anwählen (Ereignisse). Du befindest dich normalerweise auf dem Blatt-Sysmbol mit dem Schraubenschlüssel (Eigentschaften).
    Jetzt siehst Du auch, welche Ereignisse aboniert sind. Das erste hast Du selbst aboniert, in dem Du in der IDE einfach einen Doppelklick auf die Steuerfläche gemacht hast.
    Nicht benötigte Ereignisse löscht Du hier! Erst dann kannst Du den Rest des Codes aus dem Code-Editor entfernen.
    So nun habe ich eine Lösung gefunden!!

    Ich schreibe über e.keycode die Tastenpfeile in eine Variable vKeyCode. Kommt ein ENTER-Key, dann wird der Event ausgeführt.

    Private Sub coStw_KeyDown(sender As Object, e As KeyEventArgs) Handles coStw.KeyDown
    If e.KeyCode = Keys.Up Or e.KeyCode = Keys.Down Then vKeyCode = e.KeyValue
    If e.KeyCode = Keys.Enter Then
    'hier der Eventcode...
    End If
    End Sub

    Im Sub SelectIndexChanged fange ich die mit der Variable vKeyCode die Tastenbefehle ab und übergebe alle anderen Auswahlbefehle an die Eventausführung
    Private Sub coStw_SelectedIndexChanged(sender As Object, e As EventArgs) Handles coStw.SelectedIndexChanged
    If vKeyCode = 38 Or vKeyCode = 40 Then
    vKeyCode = 0
    Exit Sub
    'Event ausführen
    End Sub

    Auf diese Weise kann ich mit den Pfeiltasten in der ComboBox auswählen und mit Enter den Event auslösen - natürlich genauso mit einem Mausklick. Auch der Befehl ALT&Pfeil-nach-unten öffnet nach wie vor das ListField der Combobox!!
    Ich habe oben schon beschrieben, dass der SelectedIndexChanged Event bei jeder Pfeil-Tasten-Bewegung einen Event auslöst,

    Dann wäre wohl der DropDownClose -Event der richtige. Dieser wird gefeuert wenn sich die Combobox wieder zuklappt.