如何在表单的左上角设置坐标系的起点

本文关键字:设置 坐标系 起点 左上角 表单 | 更新日期: 2023-09-27 17:56:32

如何在表单的左上角设置坐标系的起点?因为它在显示器的左上角设置起点而不是表单,但我需要在表单的左上角设置起点。

这是我尝试执行的代码:

int x, y;
string _x, _y;
private void GetCursor()
        {
            _x = MousePosition.X.ToString();
            x = int.Parse(_x);
            label2.Text = _x;
            _y = MousePosition.Y.ToString();
            y = int.Parse(_y);
            label4.Text = _y;
        }
        private void MoveButton()
        {
            button1.Location = new Point(x,y); 
        }
    private void timer1_Tick(object sender, EventArgs e)
    {
        GetCursor();
        MoveButton();
    }   

谢谢。

如何在表单的左上角设置坐标系的起点

First Add Class (Win32.cs)

public class Win32
{ 
    [DllImport("User32.Dll")]
    public static extern long SetCursorPos(int x, int y);
    [DllImport("User32.Dll")]
    public static extern bool ClientToScreen(IntPtr hWnd, ref POINT point);
    [StructLayout(LayoutKind.Sequential)]
    public struct POINT
    {
        public int x;
        public int y;
    }
}

然后调用它 From 事件:

Win32.POINT p = new Win32.POINT();
p.x = Convert.ToInt16(txtMouseX.Text);
p.y = Convert.ToInt16(txtMouseY.Text);
Win32.ClientToScreen(this.Handle, ref p);
Win32.SetCursorPos(p.x, p.y);

带有txtMouseXtxtMouseY是自定义参数。我认为这应该在 (0, 0)。

您可以使用

Control.PointToClient 方法

Point localPoint = myForm.PointToClient(Cursor.Position);
label2.Text = localPoint.X.ToString();
label4.Text = localPoint.Y.ToString();