2009-08-17 75 views
1

我試圖找到我可以在我的程序中使用圖像的下拉式列表。它只需要在網格中顯示一些圖片,併爲每個圖片提供工具提示,並且我需要能夠獲取上次挑選的圖片。例如(沒有在它的標籤欄)下拉圖像列表

enter image description here

不幸的是我的貨幣預算是零,這意味着我不能購買任何控制。有沒有這樣的自由人,還是我需要努力製作自己的作品?

如果答案是後者,是否有任何有用的鏈接,你也許能夠給我,使我開始對這個控制工作?

+0

offtopic:使用WPF,而不是將極大地緩解問題 – 2009-08-17 07:40:32

回答

1

您可以從System.Windows.Forms.ComboBox繼承您的類並覆蓋保護的方法OnDrawItem(DrawItemEventArgs e)

示例代碼:

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); 
    } 
} 

上面的代碼只是一個快速和骯髒的例子,不應該作爲它(不應該例如創建一個新SolidBrush每個項被拉出時),但我希望它會給你如何做到這一點的想法。

2

有自定義圖像下拉列表中的許多實現在那裏。

你應該看看ComboBoxDrawMode財產。

下面是實現使用一個ImageList的,由OnDrawItemComboBox繼承,設置DrawModeOwnerDrawFixed和繪製它的元素一個簡單的例子:

ComboBox With Images

我不知道,如果這種方法使您能夠實現您提到的網格式圖像列表,但請看一下示例 - 我確定它恰好適合您的需求。