c# - Windows 窗体 : Treeview AfterClick event responding differently for Mouse Left and Mouse Right Click

标签 c# forms winforms treeview

我在 Windows 窗体中有一个 TreeView 。当我左键单击 TreeView 中的一个节点时,e.Node 显示正确的值,但是当我右键单击同一节点时,e.Node 在 trreview Afterselect 事件中显示父节点值。可能是什么原因以及如何在右键单击时获得实际节点?

 private void trView_AfterSelect(object sender, TreeViewEventArgs e)
 {    
     //e.Node is parent Node at Right click
     //e.Node is correct node at Left Click
        if (e.Node.IsSelected)
        {


        }
 }

最佳答案

链接的帖子向您展示了如何使用 MouseDown 选择节点.但是你应该知道 MouseDown当您单击 +/- 时也会触发事件在TreeView当你想让 +/-执行它的原始操作。所以通常你需要检查一些其他标准来防止在 TreeView 中出现不需要的行为。 :

  • 您可以检查鼠标是否在 +/- 上通过检查 HitTest 的结果TreeView的方法| .

  • 您可以通过检查 Button 来检查鼠标按下事件是否由鼠标右键触发。事件参数的属性。

示例

private void treeView1_MouseDown(object sender, MouseEventArgs e)
{
    TreeNode node = null;
    node = treeView1.GetNodeAt(e.X, e.Y);
    var hti = treeView1.HitTest(e.Location);

    if (e.Button != MouseButtons.Right ||
        hti.Location == TreeViewHitTestLocations.PlusMinus ||
        node == null)
    {
        return;
    }
    treeView1.SelectedNode = node;
    contextMenuStrip1.Show(treeView1, node.Bounds.Left, node.Bounds.Bottom);
}

关于c# - Windows 窗体 : Treeview AfterClick event responding differently for Mouse Left and Mouse Right Click,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39420720/

相关文章:

c# - WinForms 中的 CKEditor 下拉工具栏未注册点击事件

c# - 将焦点重新放在按钮单击事件 C# winforms 上的先前集中控制上

javascript - 将 URL 传递到表单字段的 Bookmarklet

java - 在 Selenium WebDriver 中使用特定语言有好处吗?

c# - 引发订阅的异步事件后,对象会自动处理吗?

c# - 如何在同一个类的main方法之外引用一个对象?

jQuery克隆和appendTo复制错误的内容

jquery - HTML 和 jQuery - 重置表单。如何?

c# - 如何找到圆的重叠部分

c# - 如何在C#中反序列化json对象