右键菜单和菜单行

时间:2011-04-09 08:12:05

标签: c# winforms

目标:
右键单击列表视图并选择其他选项。

问题:
有两个问题:
*当我点击右键时,菜单的左角并不完全位于箭头的位置 *如何在菜单中创建一行?

关于菜单的主要问题

The menu is not located in the right spot once you are right clicking

需要支持才能创建这两个红色标记。

Request to fulfill these two red marked

private void lstV_Stock_MouseUp(object sender, MouseEventArgs e)
{
    switch (e.Button)
    {

        // Right mouse click
            case MouseButtons.Right:


                ContextMenu myContextMenu = new ContextMenu();

                MenuItem menuItem1 = new MenuItem("New product");
                MenuItem menuItem2 = new MenuItem("Delete");
                MenuItem menuItem3 = new MenuItem("Add quantity");


                // Clear all previously added MenuItems.
                myContextMenu.MenuItems.Clear();

                myContextMenu.MenuItems.Add(menuItem1);
                myContextMenu.MenuItems.Add(menuItem2);
                myContextMenu.MenuItems.Add(menuItem3);

                if (lstV_Stock.SelectedItems.Count > 0) 
                {

                    foreach (ListViewItem item in lstV_Stock.SelectedItems)
                    {
                        myContextMenu.MenuItems[1].Visible = true;
                        myContextMenu.MenuItems[2].Visible = true;
                        myContextMenu.MenuItems[0].Visible = false;
                    }

                }
                else
                {
                    myContextMenu.MenuItems[1].Visible = false;
                    myContextMenu.MenuItems[2].Visible = false;
                    myContextMenu.MenuItems[0].Visible = true;
                }

                myContextMenu.Show(lstV_Stock, this.PointToClient(Cursor.Position), LeftRightAlignment.Right);



                menuItem1.Click += new System.EventHandler(this.menuItem1_Click);


                break;

        }

4 个答案:

答案 0 :(得分:3)

要创建“行”,您必须使用文本“ - ”

创建一个MenuItem

答案 1 :(得分:3)

对于定位,您可以替换

myContextMenu.Show(lstV_Stock, this.PointToClient(Cursor.Position), LeftRightAlignment.Right);

myContextMenu.Show(lstV_Stock, e.Location(), LeftRightAlignment.Right);

或e.X点,e.Y。不是来自this.PointToClient,而是来自生成事件的MouseEventArgs。您可以检查wahat MouseEvent是否有here

答案 2 :(得分:1)

问题

  1. 如果您只是设置ListView.ContextMenu属性并删除所有自己的右键单击代码,则菜单应该正确显示。
  2. 对于该行,您需要一个ToolStripSeparator项。当您键入“ - ”作为文本时,设计人员将创建一个。您可以在设计器中拖动它们。

答案 3 :(得分:0)

因此,使用ContextMenu是这里的方法。你所指的那些“行”叫做Separaters。

如果您要在设计视图中创建COntext菜单,请单击上下文菜单,然后在菜单中右键单击,然后单击插入>分体。

然后,您可以将其向上或向下拖动,或者根据需要拖动到子菜单中。