6

+オペレーターにPointオブジェクトを処理させる方法はありますか?

たとえば、次の小さなスニペットを見てください。

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

ほら、私はお互いに2つのポイントを追加しようとしています。それは単に機能しません(これは予想されていました)。これを機能させたいです。

何か案は?

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!

同じドキュメントで、からPointへの明示的な変換も見られ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に提供する唯一のオーバーロードは、の座標をaで変換するものです。+PointSize

2つの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または、この方法を使用することもできますが、読みやすさを向上させるとは思いません。

于 2012-05-19T08:11:32.073 に答える
0

最も単純な(そして最もクリーンな)解決策は、i_rendered.Locationをサイズにキャストすることです。

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

単純なキャストがOPの要求どおりに機能する場合、複雑なXコンポーネントとYコンポーネントに分割する必要がある方法や理由がわかりません。

于 2020-05-13T19:22:00.083 に答える