37

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

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

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

コードサンプルをいただければ幸いです。

4

11 に答える 11

50

Control.PointToClientを使用して、ポイントを画面相対座標からコントロール相対座標に変換します。別の方法が必要な場合は、PointToScreen を使用します。

于 2011-11-20T12:42:45.207 に答える
37

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

private void panel1_MouseMove(object sender, MouseEventArgs e)
{
    Text = e.Location.X + ":" + e.Location.Y;      
} 
于 2011-11-20T12:32:40.730 に答える
21

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

var coordinates = yourControl.PointToClient(Cursor.Position);
于 2014-10-13T04:12:14.610 に答える
3

Cursor.Position は画面上のポイントを返しますが、Control.PointToClient(Cursor.Position) はコントロール上のポイントを返します (例: コントロール -> パネル)。あなたの場合、あなたは e.Locate which return point on control を持っています。

于 2016-08-03T15:14:09.347 に答える
2

カーソル位置からコントロールの左と上の座標を差し引くだけです。

this.Text = Convert.ToString(
    Cursor.Position.X - this.Left + ":" +
    Cursor.Position.Y - this.Top);
于 2011-11-20T11:58:01.800 に答える
2

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;
        }
于 2015-10-31T03:25:49.683 に答える
0
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」はキャンバス パネルの場所

于 2012-12-30T18:50:27.307 に答える
0

af 標準プロジェクト C# WinForms の作成

X と Y という名前の 2 つのテキスト ボックスと、ツールボックスからのタイマー オブジェクトをデザイン ページに配置します。

[F7] を押して、すべてのコードを以下に置き換えます。

using System;
using System.Windows.Forms;

namespace MousePos
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            timer1.Start();
        }

        private void Form1_MouseCaptureChanged(object sender, EventArgs e)
        {
            X.Text = MousePosition.X.ToString();
            Y.Text = MousePosition.Y.ToString();
        }
    }
}

Timer.Tick アクションを「Form1_MouseCaptureChanged」に設定します

[F5] 実行 - これで MosusePos アプリが完成しました。

于 2020-09-08T13:45:50.920 に答える