使ったことないですねぇ~。
どうも、サンプルコードとか見ると ListView とか TreeView と一緒に使用されるモノっぽいので、
とりあえずやってみました。
TreeView のやつなのですが、サイズを最初の「小」から「大」に変更してまた「小」に戻すと、
へんてこな表示になります。なんじゃこりゃ。
おまけに、サイズを変更するとイメージが表示されなくなってしまうので、一旦クリアしてからもう一回セットしています。
基本的に、サイズは動的に変えてくれるなってことなんでしょうか。
それに...ImageList と関係ないコードのほうが多い気がする...気のせいですきっと...
■参考文献
ImageList コンポーネント (Windows フォーム)
ImageList クラス
■実行画像
ListView の SmallImageList
ListView の LargeImageList
TreeView の ImageList
ListView の SmallImageList の イメージを大きくした
Public Class ImageListTest
Private Enum ImageKeys
wankumaIcon
nakasan
eden
fujiko
End Enum
Private Enum ImageKind
カラー
白黒
End Enum
Private Enum ImageSize
小
大
End Enum
Private Enum Action
イメージ変更
サイズ変更
End Enum
Private m_tabControl As TabControl
Private Sub ImageListTest_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With Me.ImageList1
' 色深度を設定する
' 色深度 http://dictionary.rbbtoday.com/Details/term59.html
.ColorDepth = ColorDepth.Depth32Bit
' イメージの大きさ
.ImageSize = New Size(30, 30)
' 透明とみなされる色
.TransparentColor = Color.Transparent
' イメージの追加
Me.SetImages(ImageKind.カラー)
End With
'' TabControl を生成
Me.m_tabControl = New TabControl()
Me.m_tabControl.Dock = DockStyle.Fill
Me.m_tabControl.TabPages.Clear()
Me.Controls.Add(Me.m_tabControl)
'' ListView(SmallIcon)
Dim listViewSmallTabPage As TabPage = New TabPage("ListViewSmall")
Me.m_tabControl.TabPages.Add(listViewSmallTabPage)
Dim listViewSmall As ListView = New ListView()
listViewSmallTabPage.Controls.Add(listViewSmall)
With listViewSmall
.Dock = DockStyle.Fill
.View = View.SmallIcon
.SmallImageList = Me.ImageList1
With .Items
.Add(New ListViewItem("わんくま", ImageKeys.wankumaIcon))
.Add(New ListViewItem("中さん", ImageKeys.nakasan.ToString()))
End With
End With
'' ListView(Large)
Dim listViewLargeTabPage As TabPage = New TabPage("ListViewLarge")
Me.m_tabControl.TabPages.Add(listViewLargeTabPage)
Dim listViewLarge As ListView = New ListView()
listViewLargeTabPage.Controls.Add(listViewLarge)
With listViewLarge
.Dock = DockStyle.Fill
.View = View.LargeIcon
.LargeImageList = Me.ImageList1
With .Items
.Add(New ListViewItem("わんくま", ImageKeys.wankumaIcon))
.Add(New ListViewItem("中さん", ImageKeys.nakasan.ToString()))
End With
End With
'' TreeView
Dim treeViewTabPage As TabPage = New TabPage("TreeView")
Me.m_tabControl.TabPages.Add(treeViewTabPage)
Dim treeV As TreeView = New TreeView()
treeViewTabPage.Controls.Add(treeV)
With treeV
.Dock = DockStyle.Fill
.ImageList = Me.ImageList1
.ImageKey = ImageKeys.nakasan.ToString() ' 既定を中さんにする
.Nodes.Clear()
Dim rootNode As TreeNode = New TreeNode("root")
.Nodes.Add(rootNode)
With rootNode.Nodes
.Add(New TreeNode("ふじこ", ImageKeys.wankumaIcon, ImageKeys.fujiko))
.Add(New TreeNode("えでん", ImageKeys.wankumaIcon, ImageKeys.eden))
End With
End With
Dim context As ContextMenuStrip = New ContextMenuStrip()
Me.ContextMenuStrip = context
'' イメージ変更
Dim imageChangeMenu As ToolStripMenuItem = New ToolStripMenuItem(Action.イメージ変更.ToString())
imageChangeMenu.Name = imageChangeMenu.Text
context.Items.Add(imageChangeMenu)
Dim fullColorImageMenu As ToolStripMenuItem = New ToolStripMenuItem(ImageKind.カラー.ToString())
AddHandler fullColorImageMenu.Click, AddressOf ChangeImage
fullColorImageMenu.Checked = True
imageChangeMenu.DropDownItems.Add(fullColorImageMenu)
Dim blackImageMenu As ToolStripMenuItem = New ToolStripMenuItem(ImageKind.白黒.ToString())
AddHandler blackImageMenu.Click, AddressOf ChangeImage
imageChangeMenu.DropDownItems.Add(blackImageMenu)
'' サイズ変更
Dim sizeChangeMenu As ToolStripMenuItem = New ToolStripMenuItem(Action.サイズ変更.ToString())
sizeChangeMenu.Name = sizeChangeMenu.Text
context.Items.Add(sizeChangeMenu)
Dim smallImageMenu As ToolStripMenuItem = New ToolStripMenuItem(ImageSize.小.ToString())
AddHandler smallImageMenu.Click, AddressOf ChangeSize
smallImageMenu.Checked = True
sizeChangeMenu.DropDownItems.Add(smallImageMenu)
Dim largeImageMenu As ToolStripMenuItem = New ToolStripMenuItem(ImageSize.大.ToString())
AddHandler largeImageMenu.Click, AddressOf ChangeSize
sizeChangeMenu.DropDownItems.Add(largeImageMenu)
End Sub
' イメージ変更
Private Sub ChangeImage(ByVal sender As Object, ByVal e As System.EventArgs)
' 選択された MenuItem にチェックを入れる
Dim sendedMenu As ToolStripMenuItem = DirectCast(sender, ToolStripMenuItem)
Dim dropdown As ToolStripDropDownMenu = DirectCast(sendedMenu.Owner, ToolStripDropDownMenu)
For Each itm As ToolStripMenuItem In dropdown.Items
itm.Checked = False
Next
sendedMenu.Checked = True
' イメージの張り替え
If ImageKind.カラー.ToString() = sendedMenu.Text Then
Me.SetImages(ImageKind.カラー)
Else
Me.SetImages(ImageKind.白黒)
End If
' こんなことをすると画像が即座に入れ替わって表示された
Dim selectedTab As TabPage = Me.m_tabControl.SelectedTab
Me.m_tabControl.SelectedTab = Nothing
Me.m_tabControl.SelectedTab = selectedTab
End Sub
' サイズ変更
Private Sub ChangeSize(ByVal sender As Object, ByVal e As System.EventArgs)
Dim sendedMenu As ToolStripMenuItem = DirectCast(sender, ToolStripMenuItem)
Dim dropdown As ToolStripDropDownMenu = DirectCast(sendedMenu.Owner, ToolStripDropDownMenu)
For Each itm As ToolStripMenuItem In dropdown.Items
itm.Checked = False
Next
sendedMenu.Checked = True
' サイズ変更
If ImageSize.小.ToString() = DirectCast(sender, ToolStripMenuItem).Text Then
Me.ImageList1.ImageSize = New Size(30, 30)
Else
Me.ImageList1.ImageSize = New Size(100, 100)
End If
' Image の張り替え
Dim context As ContextMenuStrip = DirectCast(dropdown.OwnerItem.Owner, ContextMenuStrip)
Dim imageChangeMenu As ToolStripMenuItem = DirectCast(context.Items(Action.イメージ変更.ToString()), ToolStripMenuItem)
For Each itm As ToolStripMenuItem In imageChangeMenu.DropDownItems
If itm.Checked Then
If ImageKind.カラー.ToString() = itm.Text Then
Me.SetImages(ImageKind.カラー)
Else
Me.SetImages(ImageKind.白黒)
End If
Exit For
End If
Next
End Sub
Private Sub SetImages(ByVal kind As ImageKind)
Me.ImageList1.Images.Clear()
With Me.ImageList1
If kind = ImageKind.カラー Then
.Images.Add(ImageKeys.wankumaIcon.ToString(), My.Resources.wankumaIcon)
.Images.Add(ImageKeys.nakasan.ToString(), My.Resources.中さん)
.Images.Add(ImageKeys.eden.ToString(), My.Resources.えでんさん)
.Images.Add(ImageKeys.fujiko.ToString(), My.Resources.ふじこちゃん)
Else
.Images.Add(ImageKeys.wankumaIcon.ToString(), My.Resources.blackwankumaIcon)
.Images.Add(ImageKeys.nakasan.ToString(), My.Resources.black中さん)
.Images.Add(ImageKeys.eden.ToString(), My.Resources.blackえでんさん)
.Images.Add(ImageKeys.fujiko.ToString(), My.Resources.blackふじこちゃん)
End If
End With
End Sub
End Class