EventArg の場所に基づいて、いくつかのイベントの後にコントロールの場所を設定しようとしていますpictureBox1.Location.X = e.X;
。
ただし、これは機能しませんCannot Modify expression because it is not a variable
。しかし、x座標はプロパティであり、設定できるという印象を受けました。ここで何が起こっているのですか?
Point
は値型であり、そのX
andを変更することはできませんY
。そのような説明は、あなたを混乱させる可能性があります。この回答をここに投稿して、変更できない理由を理解できるようにしますLocation
。これLocation
は、が への参照でProperty
はなく を返すためです。代わりにフィールドがある場合は、次のように変更できます。Structure
Object
public class YourControl : BaseControl {
public Point Location;
}
//Then you can change the Location your way:
yourControl.Location.X = ....
しかし、私が言ったように、Location
はProperty
次のように値型 (構造) のコピーを返します。
public class YourControl : BaseControl {
private Point location;
public Point Location {
get {
return location;//a copy
}
set {
location = value;
}
}
}
//So when you call this:
yourControl.Location
//you will get a copy of your Location, and any changes made on this copy won't affect
//the actual structure, the compiler needs to prevent doing so.
yourControl.Location.X = ... //Should not be executed...
これは の唯一のケースではありませんLocation
。値型である他のすべてのプロパティでこの問題を見つけることができます。