2016-03-23 8 views
0

フォーム内のコントロールの位置をLocationTopLeftの組み合わせで設定できるという事実に遭遇しました。
TopおよびLeftは、Location.YおよびLocation.Xに相当するMSDN(リンクを参照)に準拠しています。Control.Location対Control.TopおよびControl.Left

Iが見つかった唯一の違いは、Locationがフォームにも使用することができることであるが、Locationを変化させることによって、またはTopLeftを変更することにより、コントロールの位置を設定するとの間の違いがありますか?

+0

と定義されているため、Locationプロパティを使用するとXとYの両方の内部プロパティが設定されることを追加する必要があります。 「this.Location.X + = 1;」を試して、なぜLeftを使うのが便利なのか理解してください。 –

+0

@HansPassantそれはさらに不便です: 'this.Location.X = new Point(this.Location.X + 1、this.Location.Y' – Breeze

答えて

1

は何実用的な違いはありません

これはthe source code for the Top property

public int Top 
{ 
    get { return y; } 
    set { SetBounds(x, value, width, height, BoundsSpecified.Y); } 
} 

ではありません、これはあなたが唯一の重要な違いを見ることができるようにthe source code for the Location property

public Point Location 
{ 
    get { return new Point(x, y); } 
    set { SetBounds(value.x, value.y, width, height, BoundsSpecified.Location); } 
} 

がポイントであるという事実です構造体とgetアクセサは値を返すときに新しい構造体を作成します。これは、このようなコードが合法ではないことを意味します。

// CS1612 Cannot modify the return value of 'Form.Location' because it is not a variable 
yourForm.Location.X = 500; 

いいですね。それは好みの問題、またはTopまたはLeftプロパティだけを変更する必要がある場合、または両方を設定する必要がある場合です。また、BoundsSpecified.Locationフラグの列挙型は、

.... 
Location = X | Y, 
.... 
関連する問題