Veränderungen einer Listbox nach einem Klick feststellen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Joe1968.

    Veränderungen einer Listbox nach einem Klick feststellen

    Hallo zusammen,

    ich möchte in meinem Quellcode die Ausführung des Click-Events verhindern, wenn sich der Zustand nach einem Klick nicht ändert, der User das selektierte Item also noch einmal angeklickt hat.
    Vermutlich ist die Lösung ziemlich simpel, aber ich versuche so etwas wie before_click zu finden. Und ich möchte ungerne mit globalen Variablen arbeiten. SelectedIndexChanged unterstützt das was ich will, anscheinend auch nicht.

    Viele Grüße
    Joe

    Joe1968 schrieb:

    also noch einmal angeklickt hat
    Doppelklick meinst Du offensichtlich nicht.
    Was könnte sich denn in einer ListBox bei einem Klick verändern?
    Warum willst Du das Klicken verhindern, wenn eh nix passiert?
    Welcher Code läuft denn beim Klicken ab, wie lange dauert das?
    ====
    Möchtest Du verhindern, dass es klickt, während die Click-Prozedur noch läuft? Das ginge so:

    VB.NET-Quellcode

    1. Private o As New Object
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. SyncLock (o)
    4. ' was tun
    5. End SyncLock
    6. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Joe1968 schrieb:

    Und ich möchte ungerne mit globalen Variablen arbeiten.


    Warum denn? Damit könnte man das doch vermutlich lösen...
    "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
    Ich habe mich wahrscheinlich verquer ausgedrückt.

    Beispiel: In einer Listbox mit zwei Auswahlen (Ja/Nein) ist Ja angeklickt. Jetzt klicke ich auf Nein. Wenn ich die Listbox Methode SelectedIndexChanged zuhilfe nehme, ist die Info, dass ich vorher Ja geklickt habe, schon weg. Ich kann nur noch feststellen, dass jetzt Nein ausgewählt ist. Versteht Ihr was ich meine?

    Ich habe einen Gesprächsleitfaden mit dynamisch erzeugten Listboxen prorgrammiert, deren Methode SelectedIndexChanged bzw. Click auf die Klicks reagieren. Ich möchte aber abbrechen, wenn sich durch den Klick nichts ändert, im obigen Beispiel also noch mal auf Ja geklickt wird.

    Ich habe das Problem zwar schon in den Griff bekommen und die Tag-Eigenschaft benutzt, um den Inhalt ausgewählter Items zwischen zu speichern und nach dem Klick mit den selected items zu vergleichen. Aber ich wollte mal wissen, ob das auch einfacher geht.

    Joe1968 schrieb:

    Versteht Ihr was ich meine?
    Das sieht etwas nach Fehldesign aus.
    Ich denke mal, Du willsz zwischen zwei oder drei Zuständen unterscheiden: "Ja", "Nein" und ggf. "nix".
    Da wäre eine GroupBox mit 2 | 3 RadioButton oder eine ComboBox mit diesen Einträgen sinnvoll.
    Da kannst Du ein CheckChange bzw. ein SelectedIndexChange abonieren und den aktuellen Zustand mit dem letzten Zustand vergleichen.
    Feddich.
    Und: Trenne Daten und GUI.
    In der Tag-Property sollten keine aktuellen Zustände gespeichert werden.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Joe1968 Offensichtlich haben wir hier ein Verständigungsproblem. :S
    Da ein Klick auf ein ListBox-Item dessen Zustand nicht ändert, ist die Abfrage des Zustandes gegenstandslos.
    Es sei denn,
    Du hast iwelche Objekte an die ListBox gehängt, die das tatsächlich tun, aber Deinen Äußerungen hier im Forum nach hast Du das nicht. :D
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Joe1968: Ohne konkrete wie-ist-Dein-konkreter-momentaner-Code-und-wie-soll-sich-alles-verhalten-Angaben könnte es sich weiterhin als schwierig erweisen, Dir eine sinnvolle Hilfe oder gar Denk-/Codieralternativen zu nennen.
    Trotzdem mein Versuch: Wenn Du nicht mit globalen oder statischen Variablen arbeiten möchtest, und das SelectedIndexChanged-Event feuert, obwohl augenscheinlich immer das selbe Item angeklickt wird (konnte ich bestätigen, aber ich verstehe noch nicht, warum das Mikrosaft so programmiert hat, schließlich ist das m.E. nicht intuitiv), wäre ein Lösungsansatz, dass Du Dir ne eigene ListBox machst, die von der normalen erbt und die Du dann quasi nur um eine private Variable LastIndexSelected erweiterst (zzgl. angepasstem Verhalten).
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.