ListBox DoubleClickEvent -> C#

TresPuntos

Cadet 4th Year
Registriert
Juni 2018
Beiträge
113
Hallo,

für meine ListBox habe ich ein DoubleClickEvent erstellt. Beim Doppel-Klick wird dieses Item dann markiert. Für mein Tool wäre es aber wichtig den vorherigen Zustand bei zu behalten. Es soll sich also gemerkt werden, ob das Item vorher schon selektiert war oder nicht und nach dem DoubleKlick soll die Methode ausgeführt werden, aber die Markierung auf dem alten Stand sein.
Ist das irgendwie möglich?
Im Internet habe ich dazu nichts gefunden :/
 
Wollte das Thema nochmal neu, bzw besser, beschreiben. Mit Doppel-Klick wird das Item automatisch selektiert. Wenn die Items schon vorher durch einmaligem Klick markiert wurden, ist das nicht weiter schlimm. Für vorher noch nicht selektierte Items aber schon. Ist es für diese Items möglich die Selektierung durch Doppel-Klick sozusagen auszuschalten, also dass das markieren mit Doppelklick "ausgeschalten" wird, dass DoubleKlick-Event mit diesem Item aber trotzdem ausgeführt wird?


charmin schrieb:
Vorher einfach auslesen welcher Wert selektiert ist (SelectedIndex) und dann wieder entsprechend setzen (SetSelected)?
Habe im Link nichts genaueres gefunden, aber wahrscheinlich meinst du die einzelnen Indexpositionen in einem Array zu speichern und später so auszugeben?
Wo sollte ich das vorherige auslesen den eintragen, weil im Event selber die Markierung bereits geschehen ist und diesen Vorgang falsch macht?
 
charmin schrieb:
Vorher einfach auslesen welcher Wert selektiert ist (SelectedIndex) und dann wieder entsprechend setzen (SetSelected)?

Findest du alles hier:
https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.listbox?view=netframework-4.7.2

Habe es wie folgt gelöst, allerdings wird der Wert trotzdem markiert, weil der erste Klick des Double-Klick die MouseClick Methode aktiviert. Es gibt wahrscheinlich keine Event, seperat für nur einen Klick und für 2 Klicks?

Code:
        ArrayList myAL = new ArrayList();
        private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            listBox1.ClearSelected();
            MessageBox.Show("Test");
            foreach(int k in myAL)
            {
                listBox1.SelectedIndex = k;
            }
        }

        private void listBox1_MouseClick(object sender, EventArgs e)
        {
            myAL.Clear();
            foreach(int k in listBox1.SelectedIndices)
            {
                myAL.Add(k);
            }
        }
 
Im Zweifelsfall musst du das Click Event überschreiben oder bei ValueChanged deinen gewünschte Funktionalität einbauen.
 
charmin schrieb:
Im Zweifelsfall musst du das Click Event überschreiben oder bei ValueChanged deinen gewünschte Funktionalität einbauen.

Hört sich nach etwas komplizierten an eventuell muss ich das einfach anders lösen und die Tabelle spalten.
 
Hallo,
das Problem ist das dass Doppelklick-Event von der ListBox selber kommt und nicht der Liste.
Man kann aber einfach die Übernahme des Index verzögern durch einen Timer.
Anbei ein kleines Beispiel.
Einziger Haken: Wenn kein Element in der ListBox angewählt ist wird DoppelKlick natürlich auch -1 sein, oder wenn man DoppelKlick auf die ListBox macht ohne ein neues Item anzuklicken wird der Index des zuletzt angewählten Items ausgegeben.
 

Anhänge

Danke für die Hilfe, aber ich habe das Problem lieber auf 2 Listen aufgespaltet :D
 
Zurück
Oben