【问题标题】:C# Right click on TreeView nodesC# 右键单击​​ TreeView 节点
【发布时间】:2013-01-08 05:49:13
【问题描述】:

我有一个带有父节点的TreeViewNode0。我加了3个subnodes

Node01
Node02
Node03

我有一个与每个子节点关联的popup menu

我的问题:如果我直接右键单击其中一个子节点,我的弹出窗口不会显示。所以我必须先选择子节点并右键单击以显示弹出窗口。

  1. 如何更改代码以便直接右键单击特定子节点打开 PopupMenu?
  2. popupMenu 列表中只有OpenMe 菜单。单击此菜单时,应该会打开一个窗口,并且此窗口应与我单击的子菜单相关联。如何获取右键子菜单的Event并显示Form?

编辑:

看看这个

private void modifySettingsToolStripMenuItem_Click(object sender, EventArgs e)
    {
        try
        {
            String s = treeView1.SelectedNode.Text;
            new chartModify(s).ShowDialog();
        }
        catch (Exception er)
        {
            System.Console.WriteLine(">>>" + er.Message);
        }
    }

String s = treeView1.SelectedNode.Text; 行获取选定节点的名称,而不是右键单击的节点。

所以这里我得用

修改这段代码
private void treeview1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
                MessageBox.Show(e.Node.Name);
        }

我是这样修改的:

try
        {
            TreeNodeMouseClickEventArgs ee;
            new chartModify(ee.Node.Name).ShowDialog();
        }

但它不起作用:Error:Use of unassigned local variable 'ee'

编辑 #2:终于找到了解决方案

public string s;
private void modifySettingsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                new chartModify(s).ShowDialog();
            }
            catch (Exception er)
            {
                System.Console.WriteLine(">>>" + er.Message);
            }
        }

然后

private void treeview1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                s = e.Node.Name;
                menuStrip1.Show();
            }
        }

有效,
谢谢

【问题讨论】:

  • 你的右键代码在哪里?
  • 哪种技术?表格?网络表单? ASP.NET MVC? WPF?

标签: c# winforms treeview


【解决方案1】:

您可以尝试使用NodeMouseClick 事件它使用TreeNodeClickEventArgs 来获取按钮和被点击的节点。

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if(e.Button == MouseButtons.Right)
        MessageBox.Show(e.Node.Name);
}

修改代码以显示弹出窗口并创建表单

public partial class Form1 : Form
{
    string clickedNode;
    MenuItem myMenuItem = new MenuItem("Show Me");
    ContextMenu mnu = new ContextMenu();
    public Form1()
    {
        InitializeComponent();
        mnu.MenuItems.Add(myMenuItem);
        myMenuItem.Click += new EventHandler(myMenuItem_Click);
    }

    void myMenuItem_Click(object sender, EventArgs e)
    {
        Form frm = new Form();
        frm.Text = clickedNode;
        frm.ShowDialog(this);
        clickedNode = "";
    }

    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            clickedNode = e.Node.Name;
            mnu.Show(treeView1,e.Location);
        }
    }
}

【讨论】:

  • 不,我想要的是显示与所选节点相关的 PopUpMenu 框。首先右键单击一个节点并选择 ShowMe 以显示一个表单,其标题设置为右键单击的节点的名称。
  • @DeathCoder 这是 Winforms 还是 Wpf?
  • 谢谢 Mark Hall,你的代码给了我灵感。我用解决方案编辑这个主题
【解决方案2】:

当您单击鼠标右键时,这将为您提供特定鼠标点的树节点。

if(e.Button == MouseButtons.Right)
        {
            TreeNode destinationNode = ((TreeView)sender).GetNodeAt(new Point(e.X, e.Y));
            //Do stuff
        }

从这里您应该能够打开特定的弹出菜单。

【讨论】:

  • 不,我想要的是显示与所选节点相关的 PopUpMenu 框。首先右键单击一个节点并选择 ShowMe 以显示一个表单,其标题设置为右键单击的节点的名称。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-20
相关资源
最近更新 更多