C# 右键单击菜单和菜单行

C# 右键单击菜单和菜单行,c#,winforms,C#,Winforms,目标: 在列表视图中单击鼠标右键,然后选择其他选项 问题: 有两个问题: *右键单击时,菜单的左角不完全位于箭头的点位置。 *如何在菜单中创建一行 菜单的主要问题 需要支持来创建这两个redmark 要创建“行”,您必须创建一个带有文本“-”的菜单项 如果您只是设置ListView.ContextMenu属性并删除所有自己的右键单击代码,则菜单应正确显示 对于该行,您需要一个ToolStripSeparator项。当您键入“-”作为文本时,设计器将创建一个。可以在设计器中拖动它们 因此,使用上下

目标:
在列表视图中单击鼠标右键,然后选择其他选项

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

菜单的主要问题

需要支持来创建这两个redmark

要创建“行”,您必须创建一个带有文本“-”的菜单项

  • 如果您只是设置ListView.ContextMenu属性并删除所有自己的右键单击代码,则菜单应正确显示
  • 对于该行,您需要一个ToolStripSeparator项。当您键入“-”作为文本时,设计器将创建一个。可以在设计器中拖动它们
    因此,使用上下文菜单是一种方法。您所指的那些“线”称为分隔符

    如果要在“设计”视图中创建关联菜单,请单击关联菜单,然后在菜单内单击鼠标右键,然后单击“插入>分隔符”


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

    对于定位,您可以替换

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


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

    上下文菜单项之间的一行是分隔符。只需添加您的上下文菜单条。+1-我不知道您可以通过键入“-”来插入分隔符。我使用了“myContextMenu.Show(lstV_Stock,e.Location,LeftRightAlignment.Right);”
    myContextMenu.Show(lstV_Stock, this.PointToClient(Cursor.Position), LeftRightAlignment.Right);
    
    myContextMenu.Show(lstV_Stock, e.Location(), LeftRightAlignment.Right);