我在我的C#GUI应用程序中使用TreeView和TreeView.Nodes,并希望在我的树中的几个节点上使用右键单击功能。我已经搜索了很多,但它似乎像SelectedNode只适用于左键单击,并没有什么可以捕获节点上的右键点击。我想在右键单击时添加诸如“添加”,“删除”,“重命名”等功能。有任何指导吗?TreeNode右键单击选项
感谢, Viren
我在我的C#GUI应用程序中使用TreeView和TreeView.Nodes,并希望在我的树中的几个节点上使用右键单击功能。我已经搜索了很多,但它似乎像SelectedNode只适用于左键单击,并没有什么可以捕获节点上的右键点击。我想在右键单击时添加诸如“添加”,“删除”,“重命名”等功能。有任何指导吗?TreeNode右键单击选项
感谢, Viren
添加处理程序的MouseUp。 在处理程序中,检查鼠标右键的参数,如果不是,则返回。 用鼠标坐标调用treeView.GetNodeAt()来查找节点。 创建一个上下文菜单。
下面是它可以适应一个TreeView列表控制类似的东西:
private void listJobs_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
int index = listJobs.IndexFromPoint(e.Location);
if (index != ListBox.NoMatches)
{
listJobs.SelectedIndex = index;
Job job = (Job)listJobs.Items[index];
ContextMenu cm = new ContextMenu();
AddMenuItem(cm, "Run", QueueForRun, job).Enabled = !job.Pending;
AddMenuItem(cm, "Cancel run", CancelQueueForRun, job).Enabled = (job.State == JobState.Pending || job.State == JobState.Running);
AddMenuItem(cm, "Open folder", OpenFolder, job);
cm.Show(listJobs, e.Location);
}
}
}
private MenuItem AddMenuItem(ContextMenu cm, string text, EventHandler handler, object context)
{
MenuItem item = new MenuItem(text, handler);
item.Tag = context;
cm.MenuItems.Add(item);
return item;
}
您可能需要使用PointToClient或PointToScreen在表格上的坐标适当翻译。当上下文菜单出现在错误的地方时,您很快就会意识到是否需要它们。
我尝试使用您的代码,它不起作用。我改变你的代码,使我的简单最初如下: 无效treeView1_MouseUp(对象发件人,发送MouseEventArgs E) { 如果(e.Button == MouseButtons.Right) { treeView1.SelectedNode = treeView1.GetNodeAt(当然, EY); Console.WriteLine(“右键单击”); } } 即使这段简单的代码似乎并不奏效。你能指出确切的问题吗?当我右键单击树中的某个节点时,甚至不会选择该节点。 – zack 2009-09-18 14:30:36
嘿谢谢斯科特。现在它工作正常。我忘了将自己编写的事件处理程序注册到我的GUI窗体应用程序中。我的错。 – zack 2009-09-18 15:08:22
不错的工作。我很高兴你解决了它。 – 2009-09-20 19:51:36
使用的ContextMenuStrip上TreeView的属性添加上下文菜单。如果您不需要显示某些节点的菜单,则可以处理ContextMenuStrip的“打开”事件以取消其显示 - 或者,您也可以从中禁用某些菜单的选项。
编辑:抢鼠标下的节点,处理在TreeView控件MouseUp事件,并使用此代码:
TreeNode nodeUnderMouse = tvMyTreeView.GetNodeAt(e.X, e.Y);
MouseUp只是在开启事件之后触发,所以不起作用。似乎没有办法在显示之前修改树视图中的上下文菜单。 – Nyerguds 2017-08-08 08:11:58
您是使用Windows Forms还是WPF? – 2009-09-18 13:18:35
是的窗体。对不起忘了提到这一点。和Visual Studio 2005. – zack 2009-09-18 13:20:51