可能重复:
如何使 + 运算符在相互添加两个点的同时工作?
我的代码
position.Location = (e.Location + pic1.Location) - bild_posi.Location;
错误之类的:
the operator "+" isnt compatible with "System.Drawing.Point + System.Drawing.Point"
我怎样才能解决这个问题?
可能重复:
如何使 + 运算符在相互添加两个点的同时工作?
我的代码
position.Location = (e.Location + pic1.Location) - bild_posi.Location;
错误之类的:
the operator "+" isnt compatible with "System.Drawing.Point + System.Drawing.Point"
我怎样才能解决这个问题?
这取决于您要如何将积分加在一起
您可以编写一个名为 AddPoints 的方法和一个名为 SubtractPoints 的方法,例如
private Point AddPoints(Point A, Point B)
{
return new Point(A.X + B.X, A.Y + B.Y);
}
private Point SubtractPoints(Point A, Point B)
{
return new Point(A.X - B.X, A.Y - B.Y);
}
然后像这样使用它
position.Location = SubtractPoints(AddPoints(e.Location,pic1.Location),bild_posi.Location);
该System.Drawing.Point
结构没有定义将两个Point
对象作为参数的加法运算符的重载。
有一个加法运算符,它接受一个Point
对象和一个Size
对象,然后将对象中包含的一对数字与Size
对象的值相加Point
。该函数的文档可在此处获得。
您可以通过将第二个Point
对象转换为对象来使用该版本Size
。这很简单,因为该Size
结构为 提供了显式转换运算符Point
,因此您只需将第二个Point
对象转换为一个Size
对象:
position.Location = (e.Location + (Size)pic1.Location) - (Size)bild_posi.Location;
请注意,我必须对第三个Point
对象做同样的事情,因为减法运算符的实现方式与加法运算符相同。
不幸的是,您不能重载 C# 中的现有运算符,但您可以创建一个包含内部逻辑的常规旧函数,然后调用它而不是使用运算符。你甚至可以使它成为Point
类的扩展方法。
编辑: 坚果,事实证明我已经回答了这个问题。
将点视为图形上的 x/y 坐标。不幸的是,您不能只添加 PointA 和 PointB 来在图表上获得 PointC。
您需要分别计算 x 和 y 坐标以实现您的目标。
话虽如此,请尝试以下操作
var pointA = new Point(e.Location.X + pic1.Location.X, e.Location.Y + pic1.Location.Y);
var pointB = new Point(pointA.Location.X - bild_posi.Location.X, pointA.Location.Y - bild_posi.Location.Y);
position.Location = pointB;