65.9K
CodeProject 正在变化。 阅读更多。
Home

为每个 TreeNode 使用多个图像

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.65/5 (16投票s)

2008年6月14日

CPOL

2分钟阅读

viewsIcon

62361

downloadIcon

1352

为每个 TreeNode 使用多个图像

引言

一般来说,我们只能为每个 TreeNode 使用一张图片。但有时我们需要多张图片,比如两张、三张或更多。我们可能还希望在点击不同图片时执行不同的操作。通过一些技巧,我们的单张图片可以像多张图片一样工作,就像我在本文的示例中所做的那样。你只需要使用任何图像编辑软件(例如 Photoshop)合并这些图片。这可以通过在 .NET 中使用 ImageList 来完成,将其分配给 TreeView

Example6

Using the Code

识别并对这些图片执行操作就像添加图片一样简单。只需使用 TreeViewNodeMouseClick 事件,如下所示…

Private Sub trvMain_NodeMouseClick(ByVal sender As System.Object, _
                ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) _
						Handles trvMain.NodeMouseClick
     Dim x = e.Node.Bounds.X
     Dim y = e.Node.Bounds.Y
     Dim h = e.Node.Bounds.Y + e.Node.Bounds.Height
     If e.X > x - 18 And e.X < x - 3 Then
         If e.Y > y And e.Y < h Then
             If e.Node.Nodes.Count = 0 Then
                 MsgBox(e.Node.Text + " Form")
             End If
         End If
     ElseIf e.X > x - 35 And e.X < x - 18 Then
         If e.Y > y And e.Y < h Then
             MsgBox(e.Node.Text + " Document")
         End If
     End If
 End Sub

在这个子例程的开始,我们已经识别了当前 TreeNode 的边界。然后我们必须检查鼠标点击的位置,如果鼠标点击在 Document Image 上,那么 IF…Else 语句的 Else 部分将得到 true,如果鼠标点击在 Form Image 上,那么 IF…Else 语句的 IF 部分将得到 true。在这两种情况下,我们都可以执行任何操作,而我只是显示一条消息。

接下来的事情是,如果你不想每个 TreeNode 都使用相同的图片,也就是说,你想更改具有子节点的 TreeNode 的图片。在运行时,当页面加载时,通过更改这些节点的 ImageIndex 属性来实现。

'Changing ImageIndex of TreeNodes which has Subtrees
	Private Sub Main_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
						Handles Me.Load
         For Each node As TreeNode In trvMain.Nodes
             If node.Nodes.Count > 0 Then
                 node.ImageIndex = 1
                 node.SelectedImageIndex = 1
                 checkChild(node)
             End If
         Next
    End Sub


    'Recurring subroutine to check whether the child node has subtree.
    Private Sub checkChild(ByVal nod As TreeNode)
         For Each node As TreeNode In nod.Nodes
              If node.Nodes.Count > 0 Then
                   node.ImageIndex = 1
                   node.SelectedImageIndex = 1
                   checkChild(node)
              End If
         Next
    End Sub

关注点

你可以使用任意数量的图片,你唯一需要做的就是使用任何图像编辑软件将它们合并。还要记住,当你在检查鼠标点击位置时,你必须知道确切的图片大小,这样你才能轻松地将其应用于 if...else 条件。

结束语

我希望这篇文章对你有所帮助。欲了解更多信息,你可以查看下载部分提供的演示程序,或者你可以在下面的评论部分留言与我联系。祝你好运!

历史

  • 2008年6月14日:初始帖子
© . All rights reserved.