0

重複の可能性:
2 つのポイントを相互に追加しながら + 演算子を機能させるにはどうすればよいですか?

私のコード

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

次のようなエラーが表示されます:

the operator "+" isnt compatible with "System.Drawing.Point + System.Drawing.Point"

どうすればこれを修正できますか?

4

3 に答える 3

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);
于 2012-07-26T14:01:43.003 に答える
1

このSystem.Drawing.Point構造体Pointは、2 つのオブジェクトをパラメーターとして受け取る加算演算子のオーバーロードを定義していません。

Pointオブジェクトとオブジェクトを受け入れ、オブジェクトSizeに含まれる数値のペアをSizeオブジェクトの値に加算する加算演算子がありPointます。その機能のドキュメントは、こちらから入手できます。

Point2 番目のオブジェクトをオブジェクトに変換することで、そのバージョンを使用できSizeます。Size構造体は の明示的な変換演算子をPoint提供するため、これは非常に簡単です。そのため、2 番目PointのオブジェクトをオブジェクトにキャストするだけですSize

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

Point減算演算子は加算演算子と同じ方法で実装されるため、3 番目のオブジェクトについても同じことを行う必要があることに注意してください。

残念ながら、C# で既存の演算子をオーバーロードすることはできませんが、ロジックを内部に含む通常の古い関数を作成し、演算子を使用する代わりにそれを呼び出すことができます。Pointこれをクラスの拡張メソッドにすることもできます。

編集: ナッツ、私はすでにこれに答えていることがわかりました

于 2012-07-26T14:02:32.073 に答える
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;
于 2012-07-26T14:03:43.710 に答える