Auslesen von ListViewItems reagiert träge



  • Hallo,

    um die Windows Forms kennenzulernen, bin ich gerade dabei, einen Explorerclone zu schreiben. Mit TreeView links und ListView rechts, wie mans gewohnt ist.

    Mit folgender Funktion wird das ListView gefüllt. files ist eine ArrayList und enthält alle Dateien im Verzeichnis.

    foreach (FileInfo fi in files)
                {
                    ListViewItem item = new ListViewItem();
                    item.Text = fi.Name;
                    item.ImageKey = fi.Name;
                    item.Tag = fi.FullName;
                    lv.Items.Add(item);
                }
    

    Die Imagelist wird aus den mit den Dateien verknüpften Icons (oder deren eigenen) generiert und mittels des Dateinamens mit den ListViewItems verknüpft:

    foreach (FileInfo fi in files)
                {
                    Images.Add(fi.Name, ImageContainer.Resize(Icon.ExtractAssociatedIcon(fi.FullName).ToBitmap(), 16, 16));
                }
    

    Resize ist:

    Bitmap bm = new Bitmap(width, height, pf);
                Graphics gr = Graphics.FromImage(bm);
                gr.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                gr.DrawImage(source, 0, 0, width, height);
                gr.Dispose();
                return bm;
    

    Alles soweit kein Problem, die Dateien werden mit passendem Namen und richtigen Icons im ListView dargestellt.

    Mein Problem jetzt:
    Mittels folgender Funktion soll, nach Aktivierung eines Items, dessen Name im StatusStrip angezeigt werden:

    private void listView1_ItemActivate(object sender, EventArgs e)
            {
                if (listView1.SelectedItems.Count > 0)
                {
                    ListViewItem item = listView1.SelectedItems[0];
                    toolStripLabel1.Text = item.Text;
                }
            }
    

    Das funktioniert auch, allerdings vergeht zwischen Klick und Aktualisierung des Labels fast eine Sekunde. Hat jemand eine Ahnung, woran das liegen könnte?

    gruß
    Martin



  • Ich bin mir nicht sicher, aber ich könnte mir vorstellen, dass das Erstellen eines neuen ListView-Objektes länger dauern könnte...

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

    Gruß,
    Ellek 🙂



  • Ellek schrieb:

    Ich bin mir nicht sicher, aber ich könnte mir vorstellen, dass das Erstellen eines neuen ListView-Objektes länger dauern könnte...

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

    Gruß,
    Ellek 🙂

    Das ListViewItem wird nicht erstellt. Es wird die Referenz auf das 1. selektierte ListViewItem geholt. Das braucht keine Zeit....



  • Okay, es liegt am Typ der Activation. Wenn der auf OneClick eingestellt ist, gibts die Verzögerung, bei Standard (Doppelklick) gibts keine. Ist das normales oder absehbares Verhalten?


Anmelden zum Antworten