C# 当鼠标右键单击项目时,如何为listView1和treeView1上的每个项目添加上下文菜单?

C# 当鼠标右键单击项目时,如何为listView1和treeView1上的每个项目添加上下文菜单?,c#,.net,winforms,C#,.net,Winforms,listView1中的项目是文件,因此我希望当我在文件上右键单击时,每个文件的菜单将显示不同的选项(属性),然后如果我在树视图1上用鼠标右键单击项目,因为树视图1上的项目是目录 当鼠标光标位于某个项目上时,我如何在右键单击特定项目时进行此操作?它将显示一个包含该项目选项的菜单 列表视图!鼠标移动事件: private void listView1_MouseUp(object sender, MouseEventArgs e) { if (e.Button == Mous

listView1中的项目是文件,因此我希望当我在文件上右键单击时,每个文件的菜单将显示不同的选项(属性),然后如果我在树视图1上用鼠标右键单击项目,因为树视图1上的项目是目录

当鼠标光标位于某个项目上时,我如何在右键单击特定项目时进行此操作?它将显示一个包含该项目选项的菜单

列表视图!鼠标移动事件:

private void listView1_MouseUp(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            if (listView1.FocusedItem.Bounds.Contains(e.Location) == true)
            {
                contextMenuStrip1.Show(Cursor.Position);
            }
        }
    }
    private void treeView1_MouseUp(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            // Select the clicked node
            treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y);

            if (treeView1.SelectedNode != null)
            {
                myContextMenuStrip.Show(treeView1, e.Location);
            }
        }
    }
TreeView W1 MouseUp事件:

private void listView1_MouseUp(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            if (listView1.FocusedItem.Bounds.Contains(e.Location) == true)
            {
                contextMenuStrip1.Show(Cursor.Position);
            }
        }
    }
    private void treeView1_MouseUp(object sender, MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            // Select the clicked node
            treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y);

            if (treeView1.SelectedNode != null)
            {
                myContextMenuStrip.Show(treeView1, 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;
    }

您可以通过使用TreeNode.name属性为文件和目录节点指定特定名称来区分它们。在COntextMenuStrip.Opening事件中,您可以根据节点名称启用或禁用菜单项

TreeNode tn = treeView1.GetNodeAt( e.X, e.Y );

if( tn != null )
{
  if( tn.Name == "FileName") {

  }
}
处理在菜单打开前显示的事件。从那里,您可以确定当前选定的文件/文件夹,并在显示菜单之前相应地更改菜单。