フォームに
ComboBox一つ
ImageList一つ
を貼り付ける。
コンボボックスのプロパティーを設定する。赤で囲んでいるところ。
次にリストボックスの画像サイズのプロパティーを設定。
で、実際にイメージを追加する。
あとは、下記のソースをコピペして、出来上がりです。
ポイント
今回は、オーナードローという機能を使って、イメージをコンボに描いてみました。
また、せっかくなので、画像をイメージリストに取り込んで表示というVBライク(コントロールライク)なサンプルにしました。
(要するに、コンボのitemにはオブジェクトが入るので、画像を放り込んで、コンボ自身に描かせてみたと言うサンプルになります。)
オーナードローのソースの部分の解説は次回にいたします。
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'プロパティーで設定する
'ComboBoxStyle.DropDownList
'DrawMode.OwnerDrawFixed
'ItemHeight = 46 '高さはイメージリストのイメージのサイズに合わせる
AddHandler ComboBox1.DrawItem, AddressOf ComboBox1_DrawItem
Dim i As Integer = 0
'せっかくなので
'オブジェクトを追加してみよう!
Do Until Me.ImageList1.Images.Count <= i
Me.ComboBox1.Items.Add(Me.ImageList1.Images(i))
i = i + 1
Loop
End Sub
Private Sub ComboBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs)
e.DrawBackground()
Dim cmb As Windows.Forms.ComboBox = CType(sender, Windows.Forms.ComboBox)
Dim p As Point
p.X = e.Bounds.X
p.Y = e.Bounds.Y
'項目に表示する画像
Dim img As Image
If e.Index > -1 Then
img = cmb.Items(e.Index)
Else
img = Me.ImageList1.Images(0)
End If
e.Graphics.DrawImage(img, p)
Debug.Print(cmb.Items.Count.ToString)
e.DrawFocusRectangle()
End Sub
End Class
|