【问题标题】:How to Get Node Text of treeView on the click event如何在点击事件上获取treeView的节点文本
【发布时间】:2013-05-09 08:38:46
【问题描述】:

我想在树视图中获取节点的文本。我正在使用 click() 事件。当我使用 AfterSelect() 事件时,我可以通过 e.Node.text 获取节点文本。如何使用Click() event 获取文本

【问题讨论】:

    标签: c# .net winforms treeview


    【解决方案1】:

    我不建议为此使用Click 事件。原因是用户可以在 TreeView 控件上单击很多的不同位置,其中许多位置与实际节点不对应。 AfterSelect 事件是一个更好的选择——它就是为这种用途而设计的。

    除此之外,Click 事件很难使用,因为它在处理程序方法中没有为您提供太多信息。它不会告诉您单击了哪个按钮、单击事件发生的位置等。您必须手动检索所有这些信息。建议您改为订阅MouseClickMouseDown/MouseUp 事件。

    要弄清楚用户点击了什么,你需要使用TreeView.HitTest方法,它返回一个包含用户点击区域详细信息的TreeViewHitTestInfo对象,或者更简单的TreeView.GetNodeAt方法,如果单击位置不存在节点,它将简单地返回null

    或者,要随时获取当前选择的节点,只需查询TreeView.SelectedNode 属性即可。如果没有选择节点,这也会返回null

    【讨论】:

    • 我的问题AfterSelect() 在节点上单击多次时不起作用。当我使用MouseClick() 事件时,selectedNode 有时会有所不同
    • @Jiss 当您在同一个节点上多次单击时,您并没有选择新节点,因此没有理由提出AfterSelect。它已经被选中。您描述的行为相对不寻常。即使节点已经被选中,每次单击节点时您都希望执行一些操作是非常罕见的。也许您应该考虑使用复选框?
    • 想象一下,我在一个节点上单击了一次......然后事件被触发。我编写了一个程序来在单击节点时显示表单。一旦表格出现,我就关闭了表格。如果我想重新打开表格。我再次单击该节点。但是AfterSelect() 不起作用。结果是表单不显示
    • 那么您应该能够处理Click 事件并使用SelectedNode 属性。
    • 事件将显示最旧的 selected ,而不是立即选择的。
    【解决方案2】:

    最好使用treeView1_AfterSelect() 事件,因为这会给出正确的选定节点文本。 treeView1_Click() 事件将显示最旧的未选择,而不是立即选择的。

    可以在Click事件上实现选中节点文本

     private void treeView1_Click(object sender, EventArgs e)
     {
        MessageBox.Show(treeView1.SelectedNode.Text);
     }
    

    请记住,Click()AfterSelect() 事件之间的区别在于它们的事件参数

    treeView1_Click(object sender, EventArgs e)
    treeView1_AfterSelect(object sender, TreeViewEventArgs e)
    

    编辑:Click() 活动上试试这个,我相信这会对你有所帮助。

     private void treeView1_Click(object sender, EventArgs e)
     {
       TreeViewHitTestInfo info = treeView1.HitTest(treeView1.PointToClient(Cursor.Position));
       if (info != null)
         MessageBox.Show(info.Node.Text);
     }
    

    【讨论】:

    • 我相信你的问题是,如果一个节点已经被选中并且你再次点击它,你应该得到文本节点。对吗?
    【解决方案3】:

    我找到了一种适合我的方法,我花了一段时间才完成我想要的,但它确实有效。

    Private Sub toolStripButton7_Click(sender As Object, e As EventArgs) Handles ToolStripButton7.Click
    
              Dim node As TreeNode = treeView1.SelectedNode
              Dim strRootPath As String = My.Settings.DefaultRootPath
    
              Dim strNode As String = treeView1.SelectedNode.Text
    
              Call treeViewRoot(strRootPath)
    
              Dim nodes As TreeNode() = treeView1.Nodes.Find(strRootPath & "\" & strNode, True)
    
              For Each node In nodes
    
                     treeView1.Focus()
                     treeView1.SelectedNode = node
    
              Next
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      相关资源
      最近更新 更多