TreeView树状控件,在日常开发中我们会经常用到,但是我们在使用的过程中,想要点击某个节点触发某个过程方法;我们(哦不,是我自己)日常的做法,是使用节点点击事件(NodeMouseClick或者AfterSelect)去根据节点名称Name或者节点Text逐一判断然后触发某个过程,不能把每个节点当作一个按钮来操作;
那么有没有一种方式,把节点当作按钮一样的,绑定一个独立的事件呢?本人百度一圈都是用上面说到的方式;但是我今天要说的就是利用 TreeView的节点Node的Tag附件属性,把每个节点的事件绑定到对应的Node的Tag属性上;然后通过NodeMouseClick事件触发,每个节点上的Tag绑定的事件;具体请看以下实现代码;
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
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
实例程序下载
https://vbee.lanzoui.com/iQN9zqr2rtg
好了今天就到此吧