Windows窗体:Treeview AfterClick事件以鼠标左键和鼠标右键单击响应不同

时间:2016-09-09 22:51:37

标签: c# forms winforms treeview

我在Windows窗体中有一个树视图。当我左键单击树视图中的节点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)
        {


        }
 }

1 个答案:

答案 0 :(得分:1)

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

  • 您可以通过查看+/-的{​​{3}}方法的结果来检查鼠标是否未超过TreeView

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

示例

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);
}