System.Drawing.Point运算符错误

时间:2012-07-26 13:58:10

标签: c# location operators picturebox

  

可能重复:
  How to make the + operator work while adding two Points to each other?

我的代码

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

错误如:

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

我该如何解决这个问题?

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

System.Drawing.Point structure没有定义加法运算符的重载,它将两个Point个对象作为参数。

有一个加法运算符接受Point对象和Size对象,然后将Size对象中包含的数字对添加到{{1的值对象。该功能的文档可用here

您可以通过将第二个Point对象转换为Point对象来使用该版本。这非常简单,因为Size结构提供了explicit conversion operator for Point,所以您只需要将第二个Size对象转换为Point对象:

Size

请注意,我必须对第三个position.Location = (e.Location + (Size)pic1.Location) - (Size)bild_posi.Location; 对象执行相同的操作,因为减法运算符的实现方式与加法运算符相同。

不幸的是,你不能在C#中重载现有的运算符,但你可以在内部创建一个包含逻辑的常规旧函数,然后调用它而不是使用运算符。你甚至可以将它作为Point类的扩展方法。

修改: Nuts, it turns out I've answered this one already

答案 2 :(得分: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;