Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Doppelklick auf Item in ListView soll Itembezogenes Ereignis auslösen
exaveal
myCSharp.de - Member



Dabei seit:
Beiträge: 100

Themenstarter:

Doppelklick auf Item in ListView soll Itembezogenes Ereignis auslösen

beantworten | zitieren | melden

Hallo Leute.

Ich verwende Windows Forms und habe eine ListView-Steuerelement. Es besitzt 4 Spalten, welche mit 4 Strings befüllt werden.


lstViewSearch.Items.Add(new ListViewItem("0", "Name0", "Vorname0", "Wohnort0", -1));
lstViewSearch.Items.Add(new ListViewItem("1", "Name1", "Vorname1", "Wohnort1", -1));
...

Nun möchte ich, dass bei einem Doppelklick auf eines der Items ein Ereignis ausgelöst wird, was sich aber speziel auf diesen Eintrag bezieht.

ListView hat zwar das Ereigniss Doppelklick:


        private void lstViewSearch_MouseDoubleClick(object sender, MouseEventArgs e)
        {

        }

Aber ich weiß ja nicht wo in der ListView hingeklickt worden ist. Natürlich kann ich noch das gerade ActivatedItem auslesen, aber dann würde ja auch das Szenario funtionieren:

Item1 auswählen, irgendwo anders in der LisView doppelklicken (zb auf eines der Spaltenbezeichnungen) und das Ereigniss würde auch mit dem aktiviertem item aufgerufen werden.

Gibt es da nicht eine schönere Lösung? Bin schon am msdn durchlesen, aber ich finde dazu leider nichts diskretes.
private Nachricht | Beiträge des Benutzers
rollerfreak2
myCSharp.de - Member

Avatar #avatar-3271.jpg


Dabei seit:
Beiträge: 928

beantworten | zitieren | melden

Du kannst aus den mitgelieferten MouseEventArgs das Item berechnen. Ich glaub da gibt es eine Mehtode am ListView Control mit der du aus einem Point das Item extrahieren kannst.
Again what learned...
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4186

beantworten | zitieren | melden

Ja, die Methode heißt "HitTest" und dort übergibt man die relative Mausposition und erhält dann ein ListViewHitTestInfo-Objekt, das u.a. die Eigenschaften 'Item' und 'SubItem' besitzt.

Und die relative Mausposition erhält man mittels:


Point pt = listView.PointToClient(Control.MousePosition);

Edit: Ich habe gerade gesehen, daß du ja MouseDoubleClick benutzt und nicht das allgemeine DoubleClick-Ereignis. Dann hast ja mittels 'e.X' und 'e.Y' bzw. 'e.Location' schon die relativen Mauskoordinaten.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Th69 am .
private Nachricht | Beiträge des Benutzers
exaveal
myCSharp.de - Member



Dabei seit:
Beiträge: 100

Themenstarter:

beantworten | zitieren | melden

Super!

Mit euren Tipps und anschließendem Googeln bin ich zu folgendem funktionierendem Ergebnis gekommen:


        // Verweis auf das zu bearbeitende ListViewItem
        ListViewItem lstViewSearchItem = null;
        // Verweis auf das zu bearbeitende ListViewSubItem
        ListViewItem.ListViewSubItem lstViewSearchSubItem = null;


        private void lstViewSearch_MouseUp(object sender, MouseEventArgs e)
        {
            ListViewHitTestInfo htInfo = lstViewSearch.HitTest(e.X, e.Y);
            if (htInfo != null)
            {
                if (htInfo.Item != null && htInfo.SubItem != null)
                {
                    lstViewSearchItem = htInfo.Item;
                    lstViewSearchSubItem = htInfo.SubItem;
                }
            }
        }

Danke!
private Nachricht | Beiträge des Benutzers