web-dev-qa-db-ja.com

C#プログラムでオブジェクトの場所を変更する

私は次のコードを試しました:

 this.balancePanel.Location.X = this.optionsPanel.Location.X;

プログラムの実行中にデザインモードで作成したパネルの場所を変更しますが、エラーが返されます。

Cannot modify the return value of 'System.Windows.Forms.Control.Location' because it is not a variable

どうすればそれができますか?

37
Ahoura Ghotbi

Locationプロパティには、構造体であるPoint型があります。

既存のPointを変更しようとする代わりに、新しいPointオブジェクトを割り当ててみてください:

 this.balancePanel.Location = new Point(
     this.optionsPanel.Location.X,
     this.balancePanel.Location.Y
 );
63
Mark Byers

場所は構造体です。便利なメンバーがいない場合は、ロケーション全体を再割り当てする必要があります。

this.balancePanel.Location = new Point(
    this.optionsPanel.Location.X,
    this.balancePanel.Location.Y);

ほとんどの構造体も不変ですが、可変である(そして混乱を招く)まれなケースでは、コピーアウト、編集、コピーインもできます。

var loc = this.balancePanel.Location;
loc.X = this.optionsPanel.Location.X;
this.balancePanel.Location = loc;

構造体は理想的には不変である必要があるため、上記は推奨しません。

15
Marc Gravell

次のいずれかを使用します。

_balancePanel.Left = optionsPanel.Location.X_

または

balancePanel.Location = new Point(optionsPanel.Location.X, balancePanel.Location.Y)

ロケーションのドキュメント を参照してください:

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

8
shf301

何らかの理由でbalancePanelが機能しない場合は、これを使用できます。

this.Location = new Point(127,283);

または

anotherObject.Location = new Point(127,283)
3
bagz_man

ポイント全体をロケーションに渡す必要があります

var point = new Point(50, 100);
this.balancePanel.Location = point;
2
Ash Burlaczenko

親パネルのプロパティのロックがtrueに設定されている場合、場所プロパティを変更できず、場所プロパティはその時点では読み取り専用のように動作します。

0
Praveen