+
オペレーターにPointオブジェクトを処理させる方法はありますか?
たとえば、次の小さなスニペットを見てください。
this.cm1.Show((MouseEventArgs)e.Location+this.i_rendered.Location);
ほら、私はお互いに2つのポイントを追加しようとしています。それは単に機能しません(これは予想されていました)。これを機能させたいです。
何か案は?
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?
それはあなたが期待するようには起こらないでしょう。構造体が(加算)演算子Point
に提供する唯一のオーバーロードは、の座標をaで変換するものです。+
Point
Size
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
または、この方法を使用することもできますが、読みやすさを向上させるとは思いません。
最も単純な(そして最もクリーンな)解決策は、i_rendered.Locationをサイズにキャストすることです。
Point newLocation = (e.Location + (Size)this.i_rendered.Location);
単純なキャストがOPの要求どおりに機能する場合、複雑なXコンポーネントとYコンポーネントに分割する必要がある方法や理由がわかりません。