2012-07-26 90 views

回答

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); 
+0

+1以使用这些方法。可重复使用,比我的解决方案更干净 – jsmith 2012-07-26 14:05:04

1

System.Drawing.Point structure未定义以两个Point对象为参数的加法运算符的超载。

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

你可以通过你的第二个Point对象转换为Size对象使用该版本。这是很容易的,因为Size结构提供了一个explicit conversion operator for Point,因此,所有你需要做的就是投你第二Point对象到Size对象:

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

注意,我必须做同样的事情,第三Point对象,因为减法运算符的实现方式与加法运算符相同。

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

编辑:Nuts, it turns out I've answered this one already

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;