如何获取鼠标点击的位置?

19

我目前正在制作一款游戏,玩家将点击他的一个单位(这些单位是图片框),然后一个圆形将显示出来,其中心是玩家的单位(圆形也是一个图片框)。当玩家点击圆形的图片框时,我需要确定点击的位置是否在圆形的半径内。我的问题是如何获取点击的位置?


2
如果你正在制作游戏,使用winforms框架并不是最好的选择。为什么不从控制台游戏开始,逐步转向XNA(或任何其他C#游戏引擎)呢? - Neowizard
3个回答

29

在您的单击事件处理程序中,执行以下操作:

MousePosition.X
MousePosition.Y

例子:

// 
// pictureBox1 Init
// 
this.pictureBox1.Click += new System.EventHandler(this.pictureBox1_Click);


private void pictureBox1_Click(object sender, EventArgs e)
{
    MessageBox.Show(string.Format("X: {0} Y: {1}", MousePosition.X, MousePosition.Y));
}

显示:“X: 537 Y: 946

还有一件事:

只有 MouseUpMouseDown 事件才能接收带有坐标的 MouseEventArgs。由于一个单击操作包括 MouseUpMouseDown 两个事件,每个事件的坐标可能不同,所以无法从 MouseClick 事件中获得鼠标坐标。

另外一个解决方案(我认为这是最好的):

private int X;
private int Y;

private void pictureBox1_Click(object sender, EventArgs e)
{
    MessageBox.Show(string.Format("X: {0} Y: {1}", X, Y));
}

private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
    X = e.X;
    Y = e.Y;
}

我能否得到一个代码类型的例子?因为当我点击一个picturebox时,我无法让它工作。我做了一个测试:protected override void OnMouseClick(MouseEventArgs e) { base.OnMouseClick(e); if (MousePosition.X > 200) { MessageBox.Show("YESSSSSSS"); } } - Mobianhero
MouseEventArgs带有坐标,只接收MouseUp和MouseDown事件。MouseClick无法接收您的坐标,因为单击由MouseUp和MouseDown组成,两者都可以具有不同的坐标。 - Alexander Molodih

7

通过 Yahia 的回答,我了解到可以将 EventArgs 强制转换为 MouseEventArgs

private void pictureBox1_Click(object sender, EventArgs e)
{
    MouseEventArgs e2 = (MouseEventArgs) e;
    MessageBox.Show(string.Format("X: {0} Y: {1}", e2.X, e2.Y));
}

3

我仍然不明白如何获取点击的坐标。 - Mobianhero
OnMouseClick жҺҘ收 MouseEventArgs дҪңдёәеҸӮж•°пјҢиҜҘеҸӮж•°е…·жңү X е’Ң Y еқҗж Ү...иҜ·еҸӮи§ҒдёҠйқўзҡ„й“ҫжҺҘ... - Yahia
2
我刚刚用XNA完成了它。 - Mobianhero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接