マウスポインターが存在するコントロールに対するマウスの位置を取得します。つまり、コントロールの開始点(左上隅)にカーソルを置くと、(0,0)が得られます。私は次のコードを使用しています:
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
this.Text = Convert.ToString(Cursor.Position.X + ":" + Cursor.Position.Y);
}
ただし、これにより、コントロールではなく画面に対する位置が決まります。
コードサンプルは大歓迎です。
イベントハンドラーに渡されるLocation
引数の MouseEventArgs
プロパティを直接使用できます。
private void panel1_MouseMove(object sender, MouseEventArgs e)
{
Text = e.Location.X + ":" + e.Location.Y;
}
Control.PointToClient を使用して、ポイントを画面相対座標から制御相対座標に変換します。他の方法で行う必要がある場合は、PointToScreenを使用します。
以下は、コントロールに対するマウス座標を示します。たとえば、マウスがコントロールの左上隅にある場合、これは(0,0)になります。
var coordinates = yourControl.PointToClient(Cursor.Position);
次の方法を使用して、相対座標を絶対座標から、絶対座標を相対座標から取得できます。
Point Control.PointToClient(Point point);
Point Control.PointToScreen(Point point);
カーソル位置からコントロールの左と上の座標を単純に引きます:
this.Text = Convert.ToString(
Cursor.Position.X - this.Left + ":" +
Cursor.Position.Y - this.Top);
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;
}
Cursor.Positionは画面上のポイントを返しますが、Control.PointToClient(Cursor.Position)はコントロール上のポイントを返します(例:control-> panel)。あなたのケースでは、e.Locateを使用して、制御上の戻り点を特定します。
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」は私のキャンバスパネルです