比较坐标时无法从 int 转换为 System.Drawing.Point

Cannot convert from int to System.Drawing.Point when comparing coordinates

我想检查两组坐标是否彼此接近。我看了一下 this answer,它建议使用毕达哥拉斯公式来计算两点之间的距离。

我比较的两组坐标是鼠标当前位置,和变量下预设的坐标point

if(Math.Sqrt(Math.Pow(point.X - this.PointToClient(Cursor.Position.X), 2) + Math.Pow(point.Y - this.PointToClient(Cursor.Position.Y), 2) < 50))
{
   Console.WriteLine("Distance between the points is less than 50");
}

变量point具有点数据类型。

我使用 this.PointToClient(Cursor.Position) 而不是 Cursor.Position 因为我想获得相对于表单的坐标,而不是相对于屏幕的坐标。但是使用它会给我以下错误:

Cannot convert from int to System.Drawing.Point

您将 .X.Y 放在了 错误的一侧:首先转换点,然后获取其坐标。

另一个问题是< 50位置

if(Math.Sqrt(Math.Pow(point.X - this.PointToClient(Cursor.Position).X, 2) + 
             Math.Pow(point.Y - this.PointToClient(Cursor.Position).Y, 2)) < 50)
{
   Console.WriteLine("Distance between the points is less than 50");
}

您可能希望提取 this.PointToClient(Cursor.Position) if 更具可读性:

var cursor = PointToClient(Cursor.Position); 

if(Math.Sqrt(Math.Pow(point.X - cursor.X, 2) + 
             Math.Pow(point.Y - cursor.Y, 2)) < 50)
{
   Console.WriteLine("Distance between the points is less than 50");
}

PointToClient 期望一个 Point 作为你传递一个 int 的参数。所以改变这个

this.PointToClient(Cursor.Position.X)

至:

this.PointToClient(Cursor.Position).X

还有

this.PointToClient(Cursor.Position.Y)

this.PointToClient(Cursor.Position).Y