Entwickler-Ecke

WinForms - [2.0, Listview] Neuanordnung nach Zuweisung von Imagelist


Christian S. - Di 29.11.05 20:35
Titel: [2.0, Listview] Neuanordnung nach Zuweisung von Imagelist
Hallo!

Ich habe eine Listview im View-Style "Tile". Dort werden (in Gruppen sortiert) die Namen von Grafikdateien eingefügt. Auf Wunsch sollen in der Listview nun auch Thumbnails angezeigt werden. Das geht so:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
        lv_files.BeginUpdate();

        lv_files.LargeImageList = imageList1;

        progressBar1.Maximum = lv_files.Items.Count;
        progressBar1.Value = 0;
        foreach (ListViewItem lvi in lv_files.Items)
        {
          string file = ((Resizer)lvi.Tag).Sourcefile;

          if (!imageList1.Images.ContainsKey(file))
          {
            Bitmap oldBmp = (Bitmap)Bitmap.FromFile(file);
            Image im = oldBmp.GetThumbnailImage(imageList1.ImageSize.Width, imageList1.ImageSize.Height, delegate { return false; }, IntPtr.Zero);

            imageList1.Images.Add(file, im);
          }

          lvi.ImageKey = file;

          progressBar1.Value += 1;
          Application.DoEvents();
        }
      
        lv_files.EndUpdate();
        
        progressBar1.Value = 0;

Die Klasse "Resizer" soll Euch dabei nicht stören, die hält einen Haufen Daten inkl. des Dateinamens. Das klappt ansich auch wunderbar, die Bilder werden erzeugt und angezeigt. Leider werden die Items aber nicht neu angeordnet, sodass der Platz nicht ausreicht und die einzelnen Items sich überschneiden. AutoArrange ist auf "true".

Wie kann ich das Problem lösen?

Grüße
Christian


Christian S. - Do 01.12.05 19:44

Hallo!

Ich habe die TileSize der Listview nun manuell so gesetzt, dass es passt. Also sowas wie:

C#-Quelltext
1:
lv_files.TileSize = new Size(250, imageList1.ImageSize.Height + 15);                    


Grüße
Christian


Christian S. - Sa 03.12.05 19:12

Nachtrag: Es funktioniert auch, den Parent der ListView einmal auf null und wieder zurückzusetzen. Das ist zwar irgendwie wenig schön, spart es einem aber, die Größe der Items manuell zu setzen.