C#,treeView,如何更改标准的右键单击行为

时间:2010-03-01 11:13:38

标签: c# treeview

我有一个问题。

我在表单上放了一个treeview控件并添加了一些节点。

    public Form1()
    {
        InitializeComponent();

        treeView1.Nodes.Add("root node #1");
        treeView1.Nodes.Add("root node #2");
        treeView1.Nodes.Add("root node #3");
        treeView1.Nodes.Add("root node #4");
        treeView1.Nodes.Add("root node #5");
    }

我想更改标准的右键单击行为。当我右键单击树节点时,Treeview更改了一段时间selectedIndex。我不想要它。如何修复标准行为?

理想情况下,它是:右键点击treenode文字 - >出现上下文菜单,右键单击treenode文本外的任何位置 - > (绝对)没有任何反应

4 个答案:

答案 0 :(得分:3)

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
 if (e.Button == MouseButtons.Right)
 {
    // put your logic here like
    // ContextMenu1.Show();
 }
}

答案 1 :(得分:1)

亚历克斯, 试试这个。 BeforeSelect处理程序事件args取消与鼠标右键关闭的事实有关。这会抑制SelectedIndex的触发发生变化。 MouseDown跟踪是否按下右键并显示上下文菜单。显示器可以安全地移动到MouseUp而不是MouseDown。 MouseUp清除表示按下RightMouse按钮的标志。

有关我如何执行此操作的所有信息均可在MSDN上获得。诀窍实际上是读取所有事件的名称 - 是的我知道有很多 - 然后在你的案例中列出“有趣的”列表,你命名为SelectedIndex更改和鼠标点击。这会立即限制您应该详细阅读的事件名称...如果您希望文本在您点击右键时不突出显示......那么这完全是另一回事,我提醒您反对它,因为它是有价值的用户反馈。

    bool isRBut = false;
    private void treeView1_MouseDown(object sender, MouseEventArgs e)
    {
        isRBut = e.Button == MouseButtons.Right;
        if (isRBut)
        {
            TreeViewHitTestInfo hti =treeView1.HitTest(e.Location);
            if (hti.Location == TreeViewHitTestLocations.Label)                
                contextMenuStrip1.Show(treeView1, new Point(hti.Node.Bounds.Left, hti.Node.Bounds.Bottom));                
        }
    }

    private void treeView1_MouseUp(object sender, MouseEventArgs e)
    {
        isRBut = e.Button == MouseButtons.Right;
    }

    private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e)
    {
        e.Cancel = isRBut;
    }

此外,这里有一些人类语言琐事。希望这将在未来帮助您。诸如“不,不,不”之类的短语被英语母语人士解释为非常粗鲁。只要尽力列出您看到的行为以及您想要的行为。即使人们误解只是坚持事实而忽略了明显的挫折迹象。这将帮助您获得所需的信息。如果某人有不接受答案的习惯,那么很多成员都会习惯不向这些成员提供未来的答案。

答案 2 :(得分:0)

覆盖MouseClick事件,并在事件中检查点击是否是右键单击

    private void treeView1_MouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            //Do something
        }
    }

答案 3 :(得分:0)

您需要处理NodeMouseClick事件并检查单击鼠标右键:

treeView1.NodeMouseClick += (o, e) => {
    if(e.Button == MouseButtons.Right)
    {
        //show menu...
    }
};