我有一个TreeView
父节点:Node0
。我添加了3 subnodes
:
Node01
Node02
Node03
我有一个popup menu
与每个子节点相关联。
我的问题:如果我直接右击其中一个子节点,我的弹出窗口就不显示了。所以我必须首先选择子节点,然后右键单击以显示弹出窗口。
OpenMe
菜单。单击此菜单时,应该打开一个窗口,这个窗口应该与我单击的子菜单相关联。如何获取右键单击子菜单的事件并使用它显示表单?编辑:
看看这个
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();
}
}
它有效,
感谢
答案 0 :(得分:21)
您可以尝试使用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);
}
}
}
答案 1 :(得分:2)
当您右键单击时,这将为您提供特定鼠标点的treenode。
if(e.Button == MouseButtons.Right)
{
TreeNode destinationNode = ((TreeView)sender).GetNodeAt(new Point(e.X, e.Y));
//Do stuff
}
从这里你可以打开一个特定的弹出菜单。