我想知道是否可以在Winforms TreeView中将StateImage的位置切换为TreeIode的IndexImage的位置?
请参阅下图以获取说明。
第一个TreeNode有一个stateImage,第二个没有。
我的目标是让所有IndexImages与左边对齐,StateImage(如果有的话)在IndexImage的右边。
结果树看起来像:
我想我必须将树DrawMode设置为OwnerDraw并覆盖OnPaint。我阅读this msdn链接,但没有关于绘制图像的说法。我真的不知道该怎么办。您可以提供的任何帮助和代码(在C#或VB.net中)都将非常感激。
非常感谢
答案 0 :(得分:1)
是的,这需要自定义绘图。
TreeView1.DrawMode = TreeViewDrawMode.OwnerDrawAll
然后你必须处理DrawNode事件。见TreeView.DrawNode Event
DrawTreeNodeEventArgs
事件中的DrawNode
参数有一个图形对象,可用于绘制从图像到文本的任何内容。
当然,一旦你去定制,你就有责任画一切(不幸的是)。有关获取正确的TreeView字形,请参阅VisualStyles。
简单说明:
Private Sub TreeView1_DrawNode(ByVal sender As Object, ByVal e As DrawTreeNodeEventArgs) Handles TreeView1.DrawNode
Dim nodeLeft As Integer = (e.Node.Level * 16) + 16
e.Graphics.DrawImage(ImageOne, nodeLeft, e.Bounds.Top)
e.Graphics.DrawImage(ImageTwo, nodeLeft + 16, e.Bounds.Top)
e.Graphics.DrawString(e.Node.Text, Me.Font, Brushes.Black, nodeLeft + 32, e.Bounds.Top)
End Sub
此示例缺少用于绘制树控件和选择状态的代码,但它显示了两个图像和节点文本。自定义绘图TreeViews需要做很多工作。