Laden...

IconList

Erstellt von dr4g0n76 vor 17 Jahren Letzter Beitrag vor 17 Jahren 5.234 Views
dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 17 Jahren
IconList

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.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 17 Jahren

Und so sieht das ganze aus:

Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 17 Jahren

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.

dr4g0n76 Themenstarter:in
2.921 Beiträge seit 2005
vor 17 Jahren

Mehrere Veränderungen:

Initialisierung per default jetzt mit 3x3 Feld

  • Select event
  • DrawInvertedImage - bestimmt, ob das Bild beim Anklicken invertiert gezeichnet wird
  • SelectionColor - versteht sich von selbst, denke ich!?
  • InvertedImage - gibt das InvertedImage zurück

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.