前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VB.NET 为Treeview控件每个节点绑定独立的事件

VB.NET 为Treeview控件每个节点绑定独立的事件

作者头像
一线编程
发布2021-07-23 15:31:59
1.5K0
发布2021-07-23 15:31:59
举报
文章被收录于专栏:办公魔盒

  TreeView树状控件,在日常开发中我们会经常用到,但是我们在使用的过程中,想要点击某个节点触发某个过程方法;我们(哦不,是我自己)日常的做法,是使用节点点击事件(NodeMouseClick或者AfterSelect)去根据节点名称Name或者节点Text逐一判断然后触发某个过程,不能把每个节点当作一个按钮来操作;

  那么有没有一种方式,把节点当作按钮一样的,绑定一个独立的事件呢?本人百度一圈都是用上面说到的方式;但是我今天要说的就是利用 TreeView的节点Node的Tag附件属性,把每个节点的事件绑定到对应的Node的Tag属性上;然后通过NodeMouseClick事件触发,每个节点上的Tag绑定的事件;具体请看以下实现代码;

一、首先创建一个字典委托

代码语言:javascript
复制
 Private ReadOnly Event_handle As New Dictionary(Of String, EventHandler)

二、把事件过程添加到字典委托

代码语言:javascript
复制
Public Sub New()
        InitializeComponent()

        Event_handle.Add("子菜单一", Sub(sd As Object, ee As Object)
                                     Label1.Text = ee.node.name
                                 End Sub)

        Event_handle.Add("子菜单二", Sub(sd As Object, ee As Object)
                                     Dim frm As New Form2
                                     frm.TopMost = True
                                     frm.Show()
                                 End Sub)

        Event_handle.Add("子菜单三", Sub(sd As Object, ee As Object)
                                     Label1.Text = ee.node.name
                                 End Sub)

        Event_handle.Add("子菜单四", Sub(sd As Object, ee As Object)
                                     MessageBox.Show(sd.ToString)
                                 End Sub)

        Event_handle.Add("子菜单五", Sub(sd As Object, ee As Object)
                                     Label1.Text = ee.node.name
                                 End Sub)

        Event_handle.Add("子菜单六", Sub(sd As Object, ee As Object)
                                     Process.Start("https://baidu.com")
                                 End Sub)
    End Sub

三、把事件委托绑定到节点Node的Tag上,并添加到TreeView控件

代码语言:javascript
复制
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim root As New TreeNode With {
                .ImageIndex = 0,
                .SelectedImageIndex = 1,
                .Text = "功能菜单",
                .Name = "功能菜单"
                }


        For Each kv As KeyValuePair(Of String, EventHandler) In Event_handle

            Dim subroot As New TreeNode With {
                .ImageIndex = 0,
                .SelectedImageIndex = 1,
                .Text = kv.Key,
                .Name = kv.Key,
                .Tag = kv.Value
                }

            root.Nodes.Add(subroot)

        Next

        TreeView1.Nodes.Add(root)

    End Sub

四、触发节点上的委托事件

代码语言:javascript
复制
    Private Sub TreeView1_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
        If e.Node.Level = 0 Then
            e.Node.Expand()
        End If
        If e.Node.Tag IsNot Nothing Then
            Dim clickev As EventHandler = e.Node.Tag
            clickev(sender, e)
        End If
    End Sub

五、完整事件代码

代码语言:javascript
复制
Public Class Form1


    Private ReadOnly Event_handle As New Dictionary(Of String, EventHandler)

    Public Sub New()
        InitializeComponent()

        Event_handle.Add("子菜单一", Sub(sd As Object, ee As Object)
                                     Label1.Text = ee.node.name
                                 End Sub)

        Event_handle.Add("子菜单二", Sub(sd As Object, ee As Object)
                                     Dim frm As New Form2
                                     frm.TopMost = True
                                     frm.Show()
                                 End Sub)

        Event_handle.Add("子菜单三", Sub(sd As Object, ee As Object)
                                     Label1.Text = ee.node.name
                                 End Sub)

        Event_handle.Add("子菜单四", Sub(sd As Object, ee As Object)
                                     MessageBox.Show(sd.ToString)
                                 End Sub)

        Event_handle.Add("子菜单五", Sub(sd As Object, ee As Object)
                                     Label1.Text = ee.node.name
                                 End Sub)

        Event_handle.Add("子菜单六", Sub(sd As Object, ee As Object)
                                     Process.Start("https://baidu.com")
                                 End Sub)
    End Sub


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Dim root As New TreeNode With {
                .ImageIndex = 0,
                .SelectedImageIndex = 1,
                .Text = "功能菜单",
                .Name = "功能菜单"
                }


        For Each kv As KeyValuePair(Of String, EventHandler) In Event_handle

            Dim subroot As New TreeNode With {
                .ImageIndex = 0,
                .SelectedImageIndex = 1,
                .Text = kv.Key,
                .Name = kv.Key,
                .Tag = kv.Value
                }

            root.Nodes.Add(subroot)

        Next

        TreeView1.Nodes.Add(root)

    End Sub


    Private Sub TreeView1_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
        If e.Node.Level = 0 Then
            e.Node.Expand()
        End If
        If e.Node.Tag IsNot Nothing Then
            Dim clickev As EventHandler = e.Node.Tag
            clickev(sender, e)
        End If
    End Sub


End Class

实例程序下载

代码语言:javascript
复制
https://vbee.lanzoui.com/iQN9zqr2rtg

好了今天就到此吧


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 办公魔盒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、首先创建一个字典委托
  • 二、把事件过程添加到字典委托
  • 三、把事件委托绑定到节点Node的Tag上,并添加到TreeView控件
  • 四、触发节点上的委托事件
  • 五、完整事件代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档