2009-08-17 5 views
1

Ich versuche eine Dropdown-Liste für Bilder zu finden, die ich in einem meiner Programme verwenden kann. Es muss nur ein paar Bilder in einem Raster mit Tooltips für jeden einzelnen angezeigt werden, und ich muss in der Lage sein, den zuletzt ausgewählten auszuwählen. Zum Beispiel (ohne die Tab-Leiste in it):Drop-Down-Bildliste

enter image description here

Leider ist mein Geld Budget Null, was bedeutet, ich keine Kontrollen kaufen kann. Gibt es solche, die frei sind, oder muss ich daran arbeiten, meine eigenen zu machen?

Wenn die Antwort die letztere ist, gibt es irgendwelche nützlichen Verbindungen, die Sie mir möglicherweise geben konnten, damit ich anfangen konnte, an einer Steuerung dafür zu arbeiten?

+0

offtopic: mit wpf stattdessen wird das Problem sehr erleichtern –

Antwort

1

Sie können Ihre Klasse von System.Windows.Forms.ComboBox und überschreiben die geschützte Methode OnDrawItem(DrawItemEventArgs e)

Beispiel Code erben:

public class ImageComboBox : ComboBox 
{ 
    protected override void OnDrawItem(DrawItemEventArgs e) 
    { 
     // Get the item. 
     var item = this.Items[e.Index] as string; 
     if(item == null) 
     return; 

     // Get the coordinates to where to draw the image. 
     int imageX = e.Bounds.X + 5; 
     int imageY = (e.Bounds.Height - image.Height)/2; 

     // Draw image 
     e.Graphics.DrawImage(image, new Point(imageX, imageY)); 

     // Draw text 
     e.Graphics.DrawString(item, this.Font, new SolidBrush(Color.Black), 
      new PointF(textX, textY); 
    } 
} 

Der obige Code ist nur eine schnelle und schmutzige Beispiel und sollte nicht verwendet werden, wie es ist (sollte nicht zum Beispiel ein neues SolidBrush jedes Mal erstellen, wenn das Element gezeichnet wird), aber ich hoffe, es wird Ihnen eine Vorstellung davon geben, wie es gemacht wird.

2

Es gibt viele Implementierungen von benutzerdefinierten Bild Dropdown-Listen da draußen.

Sie sollten sich die DrawMode Eigenschaft der ComboBox ansehen.

Hier ist ein einfaches Beispiel, das die Verwendung eines ImageList implementiert, indem sie von ComboBox vererben, die DrawMode zu OwnerDrawFixed und zeichnen ihre Elemente in OnDrawItem Einstellung:

ComboBox With Images

Ich bin mir nicht sicher, ob dieser Ansatz ermöglicht es Ihnen, die Raster-Stil-Bildliste, die Sie erwähnen, zu implementieren, aber werfen Sie einen Blick auf das Beispiel - ich bin sicher, dass es Ihren Bedürfnissen gerecht wird.