6

有什么方法可以让+操作员为 Point 对象工作?

举个例子,这个小片段:

this.cm1.Show((MouseEventArgs)e.Location+this.i_rendered.Location);

你看,我试着给彼此加两点。它只是不起作用(这是预期的)。我很想让这个工作。

有任何想法吗?

4

3 回答 3

8

我阅读了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!

在同一个文档中,我还看到了从Pointto的显式转换Size。因此,试试这个:

var p1 = new Point(10, 20);
var p2 = new Point(6, 7);
Point pTotal = p1 + (Size)p2; // your solution?
于 2012-05-19T10:57:25.760 回答
7

它不会像你期望的那样发生。该Point结构为+(加法)运算符提供的唯一重载是将 的坐标转换为PointaSize的重载。

没有办法将两个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);

或者,您可以使用Offsetmethod,但我不相信它会增强可读性。

于 2012-05-19T08:11:32.073 回答
0

最简单(也是最干净)的解决方案是将 i_rendered.Location 转换为Size

Point newLocation = (e.Location + (Size)this.i_rendered.Location);

当一个简单的演员按照 OP 所要求的方式完成工作时,我看不出如何或为什么需要将任何东西分成复杂的 X 和 Y 组件。

于 2020-05-13T19:22:00.083 回答