19

I'm currently making a game where the player will click on one of his units (which are pictureboxes) and a circle will become visible with the player's unit in the center. (Circle is also a picturebox) When the player clicks on the picturebox of the circle I need to figure out if the position of the click is inside the radius of the circle. My question is how do I get the position of the click?

Mobianhero
  • 279
  • 1
  • 2
  • 11
  • 2
    If you're working towards making a game, using the winforms framework is not the best choice. How about starting out with a console based game and working your way up to XNA (Or any other C# game engine). – Neowizard Aug 14 '11 at 05:39

3 Answers3

29

In your click handler, do:

MousePosition.X
MousePosition.Y

Example:

// 
// 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));
}

Shows: "X: 537 Y: 946"

One more thing:

The MouseEventArgs with coordinates only receives MouseUp and MouseDown. A MouseClick can't receive your coordinates, because a click consists of a MouseUp and a MouseDown, and both can have different coordinates.

One more solution (I think this is best):

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;
}
CarenRose
  • 1,266
  • 1
  • 12
  • 24
Alexander Molodih
  • 1,928
  • 2
  • 20
  • 30
  • Could I get a code type example because I can't get the click to work when I click a picturebox I did a test: protected override void OnMouseClick(MouseEventArgs e) { base.OnMouseClick(e); if (MousePosition.X > 200) { MessageBox.Show("YESSSSSSS"); } } – Mobianhero Aug 14 '11 at 15:25
  • The MouseEventArgs with coordinates receive only MouseUp and MouseDown. MouseClick can't recive you cordinates because click consists from MouseUp and MouseDown and it both can have different coordinates. – Alexander Molodih Aug 15 '11 at 09:30
7

With Yahia's answer, I learned that the EventArgs can be cast to 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));
}
D.Kastier
  • 2,640
  • 3
  • 25
  • 40
3

use the MouseClick event of the PictureBox for this sort of thing...

see
http://msdn.microsoft.com/en-us/library/system.windows.forms.picturebox.aspx
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.mouseclick.aspx
http://msdn.microsoft.com/en-us/library/system.windows.forms.mouseeventargs.aspx

Yahia
  • 69,653
  • 9
  • 115
  • 144