【问题标题】:Right click select on .Net TreeNode右键单击选择.Net TreeNode
【发布时间】:2014-03-25 22:55:33
【问题描述】:

当用户右键单击时,我试图在树视图上显示一个弹出菜单 - 允许他们选择上下文相关操作以应用于所选节点。

此时用户必须左键单击节点,然后右键选择。

是否可以右键单击节点选择该节点 - 如果可以,最好的方法是什么。

【问题讨论】:

    标签: c# winforms user-interface treeview


    【解决方案1】:

    左右点击都会触发点击事件并导致选择发生变化。但是,在某些情况下(我还没有费心追查),选择将从右键单击的节点变为最初选择的节点。

    为了确保右键改变选择,可以通过MouseDown事件强行改变选择的节点:

    treeView.MouseDown += (sender, args) =>
        treeView.SelectedNode = treeView.GetNodeAt(args.X, args.Y);
    

    正如另一位发帖人所指出的,更好一点是使用NodeMouseClick 事件:

    treeView.NodeMouseClick += (sender, args) => treeView.SelectedNode = args.Node;
    

    【讨论】:

    • 我同意。只需将此代码添加到我的表单的构造函数中就可以了。谢谢。
    • NodeMouseClick 方法的一个问题是它会在 NodeMouseClick 事件结束时更改所选节点。因此,出于我的目的,我希望在显示任何上下文菜单之前更改所选节点。为此,我不得不使用 MouseDown 方法。
    • 是的科尔曼。我添加了验证: if (e.Button == MouseButtons.Right) ...(少收费)
    【解决方案2】:

    是的。这是NodeMouseClick事件的处理:

    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
          treeView1.SelectedNode = e.Node;
    }
    

    【讨论】:

      【解决方案3】:

      然后将上下文菜单条拖到表单上:

       private void treeView1_MouseDown(object sender, MouseEventArgs e)
       {
         if (e.Button == MouseButtons.Right)
         {
             // Display context menu for eg:
             ContextMenu1.Show();
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2010-11-29
        • 2013-08-22
        • 1970-01-01
        • 2013-09-07
        • 1970-01-01
        • 1970-01-01
        • 2013-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多