私は次のコードを試しました:
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
どうすればそれができますか?
Location
プロパティには、構造体であるPoint
型があります。
既存のPoint
を変更しようとする代わりに、新しいPoint
オブジェクトを割り当ててみてください:
this.balancePanel.Location = new Point(
this.optionsPanel.Location.X,
this.balancePanel.Location.Y
);
場所は構造体です。便利なメンバーがいない場合は、ロケーション全体を再割り当てする必要があります。
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;
構造体は理想的には不変である必要があるため、上記は推奨しません。
次のいずれかを使用します。
_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を設定します。
何らかの理由でbalancePanelが機能しない場合は、これを使用できます。
this.Location = new Point(127,283);
または
anotherObject.Location = new Point(127,283)
ポイント全体をロケーションに渡す必要があります
var point = new Point(50, 100);
this.balancePanel.Location = point;
親パネルのプロパティのロックがtrueに設定されている場合、場所プロパティを変更できず、場所プロパティはその時点では読み取り専用のように動作します。