ListView Selected Item (Visual C#)



  • Hallo,

    Hab mal wieder ne einfache Frage, und ich komm nicht drauf. Also, ich hab ein ListView Element (remoteFileList). Das MarkedItem ist ein Label, und dient nur dazu, damit ich mir das ganze erstmal irgendwo ausgeben kann.

    Wenn ich jetzt ein Item in der ListView anklicke welches Ereignis ist das. Ich hab jetzt schon viele ausprobiert. Das erfolgsversprechende war das "SelectedIndexChange", dafür habe ich eine Funktion angelegt, und den Code hier reingeschrieben.

    MarkedItem.Text = "Ausgewähltes Item: " + remoteFileList.FocusedItem.Text;
    

    Wenn ich das erstemal auf ein Item Klicke, funktioniert das, bei zweitenmal, wird das Ereignis 2 mal aufgerufen, wobei der Aufruf

    remoteFileList.FocusedItem.Text;
    

    beim erstenmal ein "null" zurückgibt, und der Debugger hängt sich auf, weil er mir davon den Text nicht zurückgeben will. Da motzt er einfach.

    Welche Ereignis ist besser geeignet als das "SelectedIndexChange". Bzw. ich will einfach den String des ausgewählten Items zurückbekommen, wenn ich ihn im ListView anklicke.

    Gruß

    Markus Seidl



  • Nach einigem rumpfrimeln hab ich es jetzt doch geschafft, für alle die es interessiert.

    Ich habe das Ereignis "SelectedIndexChange" beibehalten. Über eine Try und Catch Routine fange ich die NullReferenceException ab, und tu einfach GARNICHTS. So sieht das im Code aus

    private void SelectedItem(object sender, EventArgs e)
            {
                try
                {
                    selectedRemoteItem = remoteFileList.FocusedItem.Text;
                    MarkedItem.Text = "Ausgewähltes Item: " + selectedRemoteItem;
                }
                catch (NullReferenceException)
                {
                }
            }
    

    Wäre aber trotzdem schön, wenn mir jemand ne bessere Lösung sagen könnte, weil dass die hier nicht elegant ist, sieht dochn blinder mitm Krükstock



  • Das Ereignis ist OK, nur beim Zugriff auf das aktuell selektierte Item ist Vorsicht angebracht.

    Wie du schon gemerkt hast kommt die Nachricht SelectedIndexChanged 2mal:

    - Das aktuell selektierte Item ist nicht mehr selektiert
    - Das neue Item ist nun selektiert.

    Mein Code sieht so aus:

    private void listView1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
    if(listView1.SelectedItems.Count>0)
    label1.Text = listView1.SelectedItems[0].Text;
    }

    Markus



  • ich mache auch immer so wie MarkusS

    aber noch mal zu deinem code. wenn ich weiß, dass ein objekt null sein kann, dann prüfe ich es auf null und mache nicht so ein Quatch mit try..catch mit NullReferenceException.

    if (remoteFileList.FocusedItem != null)
    {
      MarkedItem.Text = "Ausgewähltes Item: " + remoteFileList.FocusedItem.Text;
    }
    


  • Das mit dem if habe ich auch ausprobiert. Ich war nur so intelligent dahinter dann .ToString() noch hinzuhängen, um dann zu prüfen ob das auch wirklich nicht "null" ist. Ich bin erst vor einer Woche zu C# gekommen 🤡, ich habe mich an diese Sprache noch nicht gewöhnt, eigentlich selbstverständlich dass man auf null als Wert prüft. Aber als mir der Debugger ne NullReferenceException ausspuckte, und ich wusste das alles in Ordnung ist, dachte ich mir, den Fehler zwar finden, aber nicht beachten.

    Danke auf alle Fälle 😃 , da hatte ich mal ein richtiges Brett vor dem Kopf.

    Gruß

    Markus Seidl



  • Ist doch ok, jeder fängt mal klein an. Um bei kleinen und großen Problemen zu helfen ist so eine Community ja da.


Anmelden zum Antworten