web-dev-qa-db-ja.com

クリックの位置を取得する方法は?

現在、プレイヤーが自分のユニット(ピクチャボックス)の1つをクリックし、プレイヤーのユニットが中央にある状態で円が表示されるゲームを作成しています。 (円もピクチャボックスです)プレイヤーが円のピクチャボックスをクリックすると、クリックの位置が円の半径内にあるかどうかを把握する必要があります。私の質問は、クリックの位置をどのように取得するのですか?

16
Mobianhero

クリックハンドラーで:

   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」

もう1つ:

座標を持つMouseEventArgsは、MouseUpとMouseDownのみを受け取ります。

クリックはMouseUpとMouseDownで構成され、両方が異なる座標を持つことができるため、MouseClickは座標を受け取ることができません。

もう1つの解決策(最良と考える)

    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;
    }
25
3
Yahia

Yahia の答えで、EventArgsMouseEventArgsにキャストできることを知りました。

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