contextMenuStrip.show()方面的问题,如果不是最大化窗口,位置就偏离了

来源:百度知道 编辑:UC知道 时间:2024/06/01 21:14:19
private void toolStrip1_MouseUp(object sender, MouseEventArgs e)
{

if (e.Button == MouseButtons.Right)
{
contextMenuStrip1.Show(e.X,e.Y);
}
}

如果是最大化窗口的时候,鼠标右击显示contextMenuStrip的位置的鼠标当前的位置
但是如果不是最大化窗口,位置就偏离了,怎么解决,谢谢高手指点

您好,

不是很理解您为什么要这样做。不是不可以,只不过繁琐了很多,直接设置ToolStrip的ContextMenuStrip为ContextMenuStrip1不就OK了?

如果您一定要这样写的话,MouseEventArgs里保存的是鼠标键抬起时鼠标相对于程序坐标原点(左上角)的位置,因此就需要进行一定的计算。把程序的相对坐标转换成屏幕坐标,代码如下:

private void toolStrip1_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Right)
{
Point p = PointToScreen(new Point(e.X, e.Y));
contextMenuStrip1.Show(p);
}
}

如果您还有疑问,请补充问题。

谢谢。