Da vielen hier die ListView nicht passt und ich ein ähnliches Control ebenso brauchte wie einige andere um Bilderlisten eher Explorerlike und mit variablem Abstand anzuzeigen, hier die Komponente, die ich dafür entwickelt habe:
Für jedes "IconListItem" können Text, Farbe, Font usw. einzeln gesetzt werden.
Damits nicht flackert, wird DoubleBuffering gleich am Anfang aktiviert.
Die Icons ändern den Abstand proportional zueinander (Verhalten das die Listview so nicht bietet)
Kommentare und Erklärungen folgen noch.
Hier ein kurzer Code-Ausschnitt zur Verwendung:
EDIT:
Jetzt muss nichts mehr geändert werden. Einfach benutzen und gut.
Die Imagelist sollte von aussen reingegeben werden.
Edit:
private ImageList m_ImageList = new ImageList();
private IconList m_IconList = new IconList();
public Form1()
{
InitializeComponent();
this.panel1.Controls.Add(m_IconList);
m_IconList.ShowGridLines = false;
m_IconList.Dock = DockStyle.Fill;
m_IconList.AutoScale = false;
m_ImageList.Images.Add(Image.FromFile(@"letter.gif"));
m_ImageList.Images.Add(Image.FromFile(@"mail3.jpg"));
m_ImageList.Images.Add(Image.FromFile(@"invoice.gif"));
m_ImageList.Images.Add(Image.FromFile(@"fax.gif"));
m_IconList.ImageList = m_ImageList;
m_ImageList.ImageSize = new Size(32, 32); //Wichtig, da sonst die Elemente nur pixelgroß sind.
IconListItem iconListItem = null;
for (int i = 0; i < 3; i++)
{
iconListItem = new IconListItem("Test " + i.ToString(), i);
iconListItem.Font = new Font("Arial", 12, FontStyle.Italic);
m_IconList.Items.Add(iconListItem);
}
}
der Aufbau funktioniert quasi wie bei der ListView.
Für die einzelnen Items können Ausrichtung, TextFarbe, Bildindex der ImageList und Text angegeben werden.
Achtung: z.B. ActivateClipping ist noch nicht implementiert.
Für ein eigenes Projekt benötigt werden die folgenden 3 Klassen:
IconList (abgeleitet von UserControl)
IconListItem (eigene Klasse)
cGrid (eigene Klasse)
Ich habe hier das ganze Projekt angehängt.
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
Und so sieht das ganze aus:
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
Neue Version:
für neu hinzugefügte Elemente hat das Select-Event erst nach Resize/Deactivate/Reactivate usw. funktioniert.
Primitive Drag&Drop-Unterstützung hinzugefügt.
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
Mehrere Veränderungen:
Initialisierung per default jetzt mit 3x3 Feld
zuästzlicher Konstruktor
IconList(int nColumns, int nRows)
EDIT: Es sind nur die 3 Klassen
IconList.cs
IconListItem.cs
IconListEventArgs.cs
enthalten.
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.