可能重复:
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"
我该如何解决这个问题?
答案 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
类的扩展方法。
答案 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;