Как получить позицию клика? - PullRequest
16 голосов
/ 14 августа 2011

В настоящее время я делаю игру, в которой игрок нажимает на одно из своих подразделений (которые представляют собой графические окна), и круг становится видимым с отрядом игрока в центре. (Круг также является картинкой). Когда игрок нажимает на картинку коробки круга, мне нужно выяснить, находится ли позиция щелчка внутри радиуса круга. У меня вопрос, как мне получить позицию клика?

Ответы [ 3 ]

25 голосов
/ 14 августа 2011

В обработчике кликов выполните:

   MousePosition.X
   MousePosition.Y

Добавить пример:

        // 
        // pictureBox1 Init
        // 
        this.pictureBox1.Location = new System.Drawing.Point(1, 1);
        this.pictureBox1.Name = "pictureBox1";
        this.pictureBox1.Size = new System.Drawing.Size(100, 100);
        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"

Еще одна вещь:

MouseEventArgs с координатами получают только MouseUp и MouseDown.

MouseClick не может получить ваши сообщения, потому что щелчок состоит из MouseUp и MouseDown, и оба могут иметь разные координаты.

Еще одно решение (подумайте лучше)

    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;
    }
3 голосов
/ 14 августа 2011
1 голос
/ 30 мая 2018

С ответом 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));
}
...