【发布时间】:2016-08-08 20:27:53
【问题描述】:
我有一个加载了图片的图片框,我想在单击图片时读取位置(如图片框内的 x,y 中);这可能吗 ?更重要的是,我可以在鼠标悬停时读取这些坐标(点)吗?
我知道我必须使用给定的事件(鼠标单击和鼠标悬停),但不知道如何读取鼠标指针恰好所在的坐标。
【问题讨论】:
标签: c# mouse coordinates picturebox
我有一个加载了图片的图片框,我想在单击图片时读取位置(如图片框内的 x,y 中);这可能吗 ?更重要的是,我可以在鼠标悬停时读取这些坐标(点)吗?
我知道我必须使用给定的事件(鼠标单击和鼠标悬停),但不知道如何读取鼠标指针恰好所在的坐标。
【问题讨论】:
标签: c# mouse coordinates picturebox
虽然其他答案是正确的,但让我补充一下。
您已经指出您需要为此连接MouseClick 或MouseOver 事件。实际上不需要挂钩这些事件来获取Coordinates,您可以在Click 事件本身中获取Coordinates。
private void pictureBox1_Click(object sender, EventArgs e)
{
MouseEventArgs me = (MouseEventArgs)e;
Point coordinates = me.Location;
}
上述代码有效,因为 Click 事件的 e 参数包装了 MouseEventArgs,您可以直接转换并使用它。
【讨论】:
PictureBox 中呈现时没有任何转换。如果渲染的版本被拉伸、缩放或平移,则 MouseEventArgs.Location 属性将需要应用相同的转换才能在图像坐标中获得点击。
可以得到X和Y坐标如下,
this.Cursor = new Cursor(Cursor.Current.Handle);
int xCoordinate = Cursor.Position.X;
int yCoordinate = Cursor.Position.Y;
如果要获取图片框内的坐标,使用如下代码,
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
int xCoordinate = e.X;
int yCoordinate = e.Y;
}
【讨论】:
我只是总结一下答案:
在MouseClick、MouseUp 和许多其他事件中,您拥有MouseEventArgs,其中包含鼠标的Location。
在MouseHover 但是你没有MouseEventArgs 因此,如果你需要光标的位置,使用编码器示例:
private void Form1_MouseHover(object sender, EventArgs e)
{
this.Cursor = new Cursor(Cursor.Current.Handle);
int xCoordinate = Cursor.Position.X;
int yCoordinate = Cursor.Position.Y;
}
【讨论】:
如何连接 MouseUp 事件,然后从 MouseEventArgs 获取位置?
像这样:
private void pictureBox_MouseUp(object sender, MouseEventArgs e)
{
Point mousePointerLocation = e.Location;
}
【讨论】: