我在一个Windows form中工作,我有一个带有一堆节点的TreeView。我希望能够右键单击一个节点,并弹出一个带有“打开方式”选项的菜单。就像你用鼠标右键点击一个文件并说用windows media player打开一样。
我知道如何创建鼠标单击事件处理程序,但我不确定下一步该做什么。
任何建议都将不胜感激。
发布于 2015-08-19 06:18:44
这里有一个用鼠标右键点击的简单方法
private void Treeview1_MouseClick(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
ContextMenu.Show(Cursor.Position);
}
}
发布于 2021-04-20 14:49:07
这是Capn Jack在他的问题Setting the ContextMenuStrip for all nodes on a level in a TreeView?中的一个聪明的回答,关于当右键单击的节点没有首先被选中时,如何让它的上下文菜单显示出来:
treeView.NodeMouseClick += (sender, args) => treeView.SelectedNode = args.Node;
发布于 2022-01-31 00:51:56
TreeView中的上下文菜单。我使用的是Visual Studio2022,在解决同样的问题时遇到了麻烦。我有3个,并且花了很多时间试图找出哪一个调用了上下文。使用了一堆Google,大部分都是这样的,并且试验这就是我最终要做的。
将此代码添加到表单加载中,然后单击鼠标右键选择节点。
treeView1.MouseDown += (sender, args) => treeView1.SelectedNode = treeView1.GetNodeAt(args.X, args.Y);
将上下文菜单条拖放到窗体上,添加所需的任何项,并将其分配给TreeView ContextMenuStrip属性。
选择上下文菜单条,您应该会在Designer中看到:
如果您有一个TreeView:
双击该项目以获取事件。
private void treeViewCopy_Click(object sender, EventArgs e)
{
Clipboard.SetText(treeView1.SelectedNode.Text);
}
如果您有多个TreeView:
如果它们都使用相同的上下文,请将上下文菜单栏指定给每个TreeView。
如果上下文不同,构建新的上下文菜单并适当地分配它们,从那里您可以构建每个项目的点击。或者你可以遵循这个。
将此添加到Form Load:
treeViewResults.ContextMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(treeViewResults_ContextClick);
treeViewEntity.ContextMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(treeViewEntity_ContextClick);
treeView1.ContextMenuStrip.ItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(treeView1_ContextClick);
并添加以下函数:
private void treeViewEntity_ContextClick(object sender, ToolStripItemClickedEventArgs e)
{
GetTree(treeViewEntity, e.ClickedItem.Text);
}
private void treeView1_ContextClick(object sender, ToolStripItemClickedEventArgs e)
{
GetTree(treeView1, e.ClickedItem.Text);
}
private void treeViewResults_ContextClick(object sender, ToolStripItemClickedEventArgs e)
{
GetTree(treeViewResults, e.ClickedItem.Text);
}
如果使用相同的上下文菜单,那么所有这些都将运行,因此您只需打开命令,但如果它们不同,则如下所示:
private void GetTree(TreeView tree, string command)
{
if (tree.Focused && tree.SelectedNode != null)
{
switch (tree.Name)
{
case "treeViewEntity":
break;
case "treeView1":
treeView1Context(treeView1, command);
break;
case "treeViewResults":
break;
}
}
}
最后是这个:
private void treeView1Context(TreeView tree, string command)
{
switch (command)
{
case "Copy":
Clipboard.SetText(tree.SelectedNode.Text);
break;
case "Edit":
break;
}
}
https://stackoverflow.com/questions/32082280
复制相似问题