0

可能重复:
如何使 + 运算符在相互添加两个点的同时工作?

我的代码

position.Location = (e.Location + pic1.Location) - bild_posi.Location;

错误之类的:

the operator "+" isnt compatible with "System.Drawing.Point + System.Drawing.Point"

我怎样才能解决这个问题?

4

3 回答 3

5

这取决于您要如何将积分加在一起

您可以编写一个名为 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);
于 2012-07-26T14:01:43.003 回答
1

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类的扩展方法。

编辑: 坚果,事实证明我已经回答了这个问题

于 2012-07-26T14:02:32.073 回答
0

将点视为图形上的 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;
于 2012-07-26T14:03:43.710 回答