0

EventArg の場所に基づいて、いくつかのイベントの後にコントロールの場所を設定しようとしていますpictureBox1.Location.X = e.X;

ただし、これは機能しませんCannot Modify expression because it is not a variable。しかし、x座標はプロパティであり、設定できるという印象を受けました。ここで何が起こっているのですか?

4

3 に答える 3

1

Pointは値型であり、そのXandを変更することはできませんY。そのような説明は、あなたを混乱させる可能性があります。この回答をここに投稿して、変更できない理由を理解できるようにしますLocation。これLocationは、が への参照でPropertyはなく を返すためです。代わりにフィールドがある場合は、次のように変更できます。StructureObject

public class YourControl : BaseControl {
   public Point Location;
}
//Then you can change the Location your way:
yourControl.Location.X = ....

しかし、私が言ったように、LocationProperty次のように値型 (構造) のコピーを返します。

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。値型である他のすべてのプロパティでこの問題を見つけることができます。

于 2013-06-23T15:24:53.493 に答える