web-dev-qa-db-ja.com

コントロールに対するカーソル位置を取得する-C#

マウスポインターが存在するコントロールに対するマウスの位置を取得します。つまり、コントロールの開始点(左上隅)にカーソルを置くと、(0,0)が得られます。私は次のコードを使用しています:

    private void panel1_MouseMove(object sender, MouseEventArgs e)
    {
        this.Text = Convert.ToString(Cursor.Position.X + ":" + Cursor.Position.Y);         
    } 

ただし、これにより、コントロールではなく画面に対する位置が決まります。

コードサンプルは大歓迎です。

29
Farid-ur-Rahman

イベントハンドラーに渡されるLocation引数の MouseEventArgs プロパティを直接使用できます。

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
    Text = e.Location.X + ":" + e.Location.Y;      
} 
28
Ani

Control.PointToClient を使用して、ポイントを画面相対座標から制御相対座標に変換します。他の方法で行う必要がある場合は、PointToScreenを使用します。

42
BrendanMcK

以下は、コントロールに対するマウス座標を示します。たとえば、マウスがコントロールの左上隅にある場合、これは(0,0)になります。

var coordinates = yourControl.PointToClient(Cursor.Position);
15
Justas

次の方法を使用して、相対座標を絶対座標から、絶対座標を相対座標から取得できます。

Point Control.PointToClient(Point point);

Point Control.PointToScreen(Point point);
3
Chris

カーソル位置からコントロールの左と上の座標を単純に引きます:

this.Text = Convert.ToString(
    Cursor.Position.X - this.Left + ":" +
    Cursor.Position.Y - this.Top);
2
BlackBear

MouseLocationとPointToClientを使用して確認します。そして、それをタイマーで使用します!

bool IsMouseHover(Control c, Control container)
        {
            Point p = Control.MousePosition;
            Point p1 = c.PointToClient(p);
            Point p2 = container.PointToClient(p);
            if (c.DisplayRectangle.Contains(p1) && container.DisplayRectangle.Contains(p2))
            {
                return true;
            }
            return false;
        }
1

Cursor.Positionは画面上のポイントを返しますが、Control.PointToClient(Cursor.Position)はコントロール上のポイントを返します(例:control-> panel)。あなたのケースでは、e.Locateを使用して、制御上の戻り点を特定します。

1
ndukan
private void lienzo_MouseLeftButtonDown_1(object sender, MouseButtonEventArgs e)
{
    Point coordenadas = new Point();
    coordenadas = Mouse.GetPosition(lienzo);

    string msg = "Coordenadas mouse :" + coordenadas.X + "," + coordenadas.Y;
    MessageBoxResult resultado;
    string titulo = "Informacion";
    MessageBoxButton botones = MessageBoxButton.OK;
    MessageBoxImage icono = MessageBoxImage.Information;

    resultado = MessageBox.Show(msg, titulo, botones, icono);
}

「lienzo」は私のキャンバスパネルです

0
Pichitron