有什么方法可以让+
操作员为 Point 对象工作?
举个例子,这个小片段:
this.cm1.Show((MouseEventArgs)e.Location+this.i_rendered.Location);
你看,我试着给彼此加两点。它只是不起作用(这是预期的)。我很想让这个工作。
有任何想法吗?
我阅读了System.Drawing.Point
(链接在 Cody Gray 的答案中)的文档,它有一个实例方法Offset
。该方法改变了电流Point
(设计者选择制作Point
一个可变结构!)。
所以这里有一个例子:
var p1 = new Point(10, 20);
var p2 = new Point(6, 7);
p1.Offset(p2); // will change p1 into the sum!
在同一个文档中,我还看到了从Point
to的显式转换Size
。因此,试试这个:
var p1 = new Point(10, 20);
var p2 = new Point(6, 7);
Point pTotal = p1 + (Size)p2; // your solution?
它不会像你期望的那样发生。该Point
结构为+
(加法)运算符提供的唯一重载是将 的坐标转换为Point
aSize
的重载。
没有办法将两个Point
结构加在一起,我什至不确定这意味着什么。
考虑到您不能编写重载操作符的扩展方法,也不要浪费太多时间来弄清楚它。
幸运的是,在编译语言中,将代码拆分为多行不会有任何损失。因此,您可以按如下方式重新编写代码:
Point newLocation = new Point(e.Location.X + this.i_rendered.Location.X,
e.Location.Y + this.i_rendered.Location.Y);
this.cm1.Show(newLocation);
或者,您可以使用Offset
method,但我不相信它会增强可读性。
最简单(也是最干净)的解决方案是将 i_rendered.Location 转换为Size
Point newLocation = (e.Location + (Size)this.i_rendered.Location);
当一个简单的演员按照 OP 所要求的方式完成工作时,我看不出如何或为什么需要将任何东西分成复杂的 X 和 Y 组件。