【问题标题】:Switch positions of StateImage and IndexImage for a TreeNode in a Winforms TreeView control在 Winforms TreeView 控件中为 TreeNode 切换 StateImage 和 IndexImage 的位置
【发布时间】:2012-02-12 18:28:34
【问题描述】:

我想知道是否可以在 Winforms TreeView 中将 StateImage 的位置与 TreeNode 的 IndexImage 的位置切换?

请参考下图的说明。

第一个 TreeNode 有一个 stateImage 而第二个没有。

我的目标是让所有 IndexImage 都对齐到左侧,而 StateImage(如果有的话)对齐到 IndexImage 的右侧。

生成的树看起来像:

我想我必须将树 DrawMode 设置为 OwnerDraw 并覆盖 OnPaint。我阅读了thismsdn 链接,但没有提到关于绘制图像的内容。我真的不知道如何进行。非常感谢您提供的任何帮助和代码(在 C# 或 VB.net 中)。

非常感谢

【问题讨论】:

    标签: vb.net winforms .net-3.5 treeview treenode


    【解决方案1】:

    是的,这需要自定义绘图。

    TreeView1.DrawMode = TreeViewDrawMode.OwnerDrawAll
    

    然后你必须处理 DrawNode 事件。见TreeView.DrawNode Event

    DrawNode 事件中的DrawTreeNodeEventArgs 参数有一个图形对象,您可以使用它来绘制任何东西,从图像到文本。

    当然,一旦你去定制,你有责任绘制一切(不幸的是)。请参阅 VisualStyles 以获取正确的 TreeView 字形。

    简单说明:

    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
    

    此示例缺少用于绘制树控件和选择状态的代码,但它显示了两个图像和节点文本。自定义绘图 TreeView 的工作量很大。

    【讨论】:

    • 感谢您的回复。您昨晚提供的链接非常有用。我已经使用状态图像处理了绘制子节点。对于所有其他节点,我设置 e.DrawDefault = True。这解决了我的问题并减少了我必须编写的代码量。剩下的唯一问题是使用状态图像为选定的子节点绘制突出显示。我将 FillRectangle 与 SystemBrushes.Highlight 一起使用,但外观不一致。我将查看您在更新中提供的 VisualStyles 链接以获取任何灵感。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 2010-11-15
    • 2021-05-31
    • 1970-01-01
    相关资源
    最近更新 更多