-1

我正在使用代码编辑器,我为右键单击制作了一个鼠标事件,特别是这段代码:

if (e.Button == MouseButtons.Right)
{               
      lbright.Show(Cursor.Position.X, Cursor.Position.Y);
      lbright.BringToFront();               
}

但问题是每次我运行它时都会出现“方法重载”错误并指向.Show(Cursor.Position.X, Cursor.Position.Y);

我怎样才能避免它?

4

4 回答 4

3

您正在尝试显示上下文菜单。使用为该任务设计的类:ContextMenu.

这个类有一个Show方法可以让你定位菜单:Show(Control, Point)

于 2013-05-14T07:47:29.827 回答
2

错误很明显:该Control.Show()方法只有一个重载:一个没有参数。

如果要移动控件,请设置TopLeft属性。

于 2013-05-14T07:37:07.410 回答
1

如果您使用ContextMenu并使用带有偏移量的.Show(Control, Point)重载,您应该让菜单显示:

if (e.Button == MouseButtons.Right)
{               
    // build a new ContextMenu with some menu items, let's use copy and paste
    ContextMenu ctxRightClick = new ContextMenu(new MenuItem[]
    {
        new MenuItem("Copy"),
        new MenuItem("Paste")
    });

    // as per the documentation, the Point used by .Show is relative to the control you pass in so we calculate an offset from the mouse position
    int xOffset = Cursor.Position.X - myForm.Location.X;
    int yOffset = Cursor.Position.Y - myForm.Location.Y;

    // now show the context menu as a child of myForm at the specified offset
    ctxRightClick.Show(myForm, new Point(xOffset, yOffset));
}
于 2013-05-14T09:08:47.603 回答
0

根据我从您的问题中得到的信息,我认为这可能会有所帮助

lbright.Top=Cursor.Position.X;
lbright.Left=Cursor.Position.Y;
lbright.Show();
于 2013-05-14T07:51:50.237 回答