【问题标题】:How can i fix the issue for context menu for Treeview click如何解决 Treeview 单击的上下文菜单的问题
【发布时间】:2010-12-02 19:32:25
【问题描述】:

我在右键单击树视图时打开上下文菜单的代码如下

private void contextMenu_Opening(object sender, CancelEventArgs e)
    {
        if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 1)
        {
            contextMenu.Items.Add(New);
            contextMenu.Items.Remove(Remove);
            contextMenu.Items.Remove(Saveas);
            contextMenu.Items.Remove(Save);
            contextMenu.Items.Remove(addEntry);
        }
        if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 2)
        {
            contextMenu.Items.Add(New);
            contextMenu.Items.Remove(Remove);
            contextMenu.Items.Remove(Saveas);
            contextMenu.Items.Remove(Save);
            contextMenu.Items.Remove(addEntry);
            New.Text = "Add FileHeader";
        }
        if (Convert.ToInt16(tvwACH.SelectedNode.Tag) == 3)
        {
            contextMenu.Items.Remove(New);
            contextMenu.Items.Add(Save);
            contextMenu.Items.Add(Saveas);
            contextMenu.Items.Remove(Remove); //Added later
            contextMenu.Items.Remove(addEntry);
        }
        if (tvwACH.SelectedNode.Parent != null)
        {
            string str = tvwACH.SelectedNode.Parent.ToString().Substring(10);
            if (str == "BatchHeader")
            {
                contextMenu.Items.Remove(New);
                contextMenu.Items.Remove(Save);
                contextMenu.Items.Remove(Remove);
                contextMenu.Items.Remove(Saveas);
                contextMenu.Items.Add(addEntry);
            }
        }

也可以按下鼠标查看树形视图,如下所示

 private void tvwACH_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            contextMenu.Show(tvwACH, e.Location);
        }
        location = e.Location;
    }

但这会在树视图控件的每个位置打开,但我只需要在单击树视图的节点时打开它。

请帮忙

【问题讨论】:

    标签: c# winforms treeview


    【解决方案1】:

    如果您只想在用户右键单击节点时显示上下文菜单,则需要在您的MouseDown 事件处理程序中包含一些逻辑,以验证单击事件是否发生在节点上。

    您可以使用TreeView 提供的HitTest method 确定位于特定点的节点。例如,您可以修改当前的 MouseDown 事件处理程序以包含以下代码:

    private void tvwACH_MouseDown(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            if (tvwACH.HitTest(e.Location).Node != null)
            {
                contextMenu.Show(tvwACH, e.Location);
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-04
      • 1970-01-01
      • 2011-07-07
      • 2013-07-26
      • 2018-09-23
      • 2012-01-15
      • 1970-01-01
      • 2011-11-02
      相关资源
      最近更新 更多