【问题标题】:.NET Simulate NodeMouseClick in Treeview.NET 在 Treeview 中模拟 NodeMouseClick
【发布时间】:2013-10-11 19:00:24
【问题描述】:

VB2010 我在 Treeview 的 NodeMouseClick 中有一个非常好的例程,它根据用户单击的节点来隐藏/显示表单中的面板。简化版:

Private Sub tvw_NodeMouseClick(sender As Object, e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles tvw.NodeMouseClick
        Dim pNode As TreeNode = e.Node      'get the node that was clicked
        Dim nodeName As String = pNode.Name 'get the name of the node

        Select Case nodeName.ToLower
            Case "gen"
                pnlGeneral.Visible = True
                pnlOrigin.Visible = False
            Case "ogn"
                pnlGeneral.Visible = False
                pnlOrigin.Visible = True
            Case Else
                'do nothing
        End Select
End Sub

我的问题是在表单加载时我想要选择一个默认节点,或者实际上就像用户单击默认节点一样完成。

Private Sub frm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        'initialize the treeview
        With tvw
            .Nodes.Add("gen", "General", "gen", "gen")
            .Nodes.Add("ogn", "Origin", "ogn", "ogn")
            .SelectedNode = .Nodes.Item("gen")
        End With
End Sub

.SelectedNode 不这样做,我试图弄清楚如何在 .NET 中这样做。在 VB6 中,我曾经使用 tvw_NodeClick tvw.Nodes("gen")。

【问题讨论】:

    标签: .net click treeview treenode mouseclick-event


    【解决方案1】:

    您可以直接调用 tvw_NodeMouseClick(),尝试触发事件没有意义。但由于争论,这有点烦人。只需重构代码并分解出您想要重用的部分:

    Private Sub NodeSelect(pNode As TreeNode)
        Dim nodeName As String = pNode.Name ''get the name of the node
    
        Select Case nodeName.ToLower
            Case "gen"
                pnlGeneral.Visible = True
                pnlOrigin.Visible = False
            Case "ogn"
                pnlGeneral.Visible = False
                pnlOrigin.Visible = True
            Case Else
                ''do nothing
        End Select
    End Sub
    
    Private Sub tvw_NodeMouseClick(sender As Object, e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles tvw.NodeMouseClick
        NodeSelect(e.Node)
    End Sub
    

    现在是微不足道的:

    Private Sub frm_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        With tvw
            Dim node = .Nodes.Add("gen", "General", "gen", "gen")
            .Nodes.Add("ogn", "Origin", "ogn", "ogn")
            .SelectedNode = node
            NodeSelect(node)
        End With
    End Sub
    

    【讨论】:

    • ahhhhh...如此简单,它是“我为什么没想到”的其中之一。我想我想多了。让我试一试。
    • 效果很好!。谢谢。我唯一添加的是.SelectedNode之后我放了一个.Select(),否则默认节点不高亮。
    猜你喜欢
    • 2019-04-08
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多