1

このコードが合法ではない理由

Point point = new Point();
point.X = 6;
point.Y = 5;

しかし、これはエラーを生成しますか?

myButton.Location.X = 6;
myButton.Location.Y = 5;

構造体は値型であることは知っていますが、コピーを取得するため、Location.X間接的に変更することはできずmyButton.Location、まったく新しい構造体を as として割り当てる必要がありますnew Point(6,5)が、なぜ機能point.X = 6するのでしょうか?

違いがわかりません。

4

3 に答える 3

1

MSDNから:方法:Windowsフォームの位置コントロール

このプロパティを使用してLocation、コントロールのX位置とY位置を同時に設定します。位置を個別に設定するには、コントロールの左(X)または上(Y)サブプロパティを使用します。ボタンの位置を表すPoint構造のX座標とY座標を暗黙的に設定しようとしないでください。この構造には、ボタンの座標のコピーが含まれているためです。

コントロール。場所

Pointクラスは値型であるため、値によって返されます。つまり、プロパティにアクセスすると、コントロールの左上のポイントのコピーが返されます。したがって、このプロパティから返されるPointのXまたはYプロパティを調整しても、コントロールのLeft、Right、Top、またはBottomプロパティ値には影響しません。これらのプロパティを調整するには、各プロパティ値を個別に設定するか、新しいポイントを使用してLocationプロパティを設定します。

于 2012-11-21T11:33:31.057 に答える
1

しかし、なぜpoint.X = 6が機能するのでしょうか?

pointは変数だからです。変数の値の一部を変更しているだけです。これは許可されており、便利です(ただし、可能な限り、可変値型の使用は個人的に避けたいと思います)。

したがって、たとえば、次のように書くことができます。

Point point = myButton.Location;
point.X = 6;
myButton.Location = point;

...そしてそれは事実上forの値を変更するだけXですmyButton.Location

コピーされて失われた値の一部を変更することは役に立ちません

于 2012-11-21T11:33:38.973 に答える
0

あなたが言うときはmyButton.Location Locationすでにコピーであり、それへの参照がないからです。そして、いかなるオブジェクトの変更や損失にも意味がありません。

于 2012-11-21T11:37:04.323 に答える