Windows窗体:Treeview AfterClick事件对鼠标左键和鼠标右键的响应不同

本文关键字:鼠标 右键 响应 Treeview AfterClick 事件 Windows 窗体 | 更新日期: 2023-09-27 18:06:36

我有一个窗口形式的树视图。当我左键单击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)
        {

        }
 }

Windows窗体:Treeview AfterClick事件对鼠标左键和鼠标右键的响应不同

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

中的不必要的行为。
  • 您可以通过检查TreeViewHitTest方法的结果来检查鼠标是否在+/-上。

  • 您可以通过检查事件参数的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);
}