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

时间:2014-12-11 15:33:04

标签: c# .net winforms

listView1中的项目是文件,所以我希望每个文件的菜单,当我在文件上右键单击鼠标时会显示不同的选项(属性)然后如果我正在做正确的clikc与鼠标在treeView1项上,因为treeView1上的项目是目录。

当鼠标光标在某个项目上时,如何右键单击特定项目,它将显示一个菜单,其中包含此项目的选项?

listView! 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);
            }
        }
    }

treeView1 MouseUp事件:

    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;
    }

1 个答案:

答案 0 :(得分:1)

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

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

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

  }
}