it-swarm.com.de

C # Ändern Sie den Speicherort eines Objekts programmgesteuert

Ich habe folgenden Code ausprobiert: 

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

so ändern Sie den Ort eines Bedienfelds, das ich im Entwurfsmodus erstellt habe, während das Programm ausgeführt wird, gibt jedoch einen Fehler zurück: 

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

also ist die Frage wie kann ich das machen?

36
Ahoura Ghotbi

Die Location-Eigenschaft hat den Typ Point, der eine Struktur ist.

Anstatt die vorhandene Point zu ändern, versuchen Sie, ein neues Point-Objekt zuzuweisen:

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

Standort ist eine Struktur. Wenn keine Convenience-Mitglieder vorhanden sind, müssen Sie den gesamten Standort neu zuweisen:

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

Die meisten Strukturen sind auch unveränderlich, aber in dem seltenen (und verwirrenden) Fall, dass es veränderbar ist, können Sie auch kopieren, bearbeiten, kopieren;

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

Ich empfehle das oben nicht, da structs idealerweise unveränderlich sein sollten.

15
Marc Gravell

Benutze das eine oder das andere:

balancePanel.Left = optionsPanel.Location.X

oder

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

Siehe Dokumentation des Standorts :

Da es sich bei der Point-Klasse um einen Wertetyp handelt (Struktur in Visual Basic, Struktur in Visual C #), wird er nach Wert zurückgegeben. Das bedeutet, dass beim Zugriff auf die Eigenschaft eine Kopie des linken oberen Punkts des Steuerelements zurückgegeben wird. Das Ändern der X- oder Y-Eigenschaften des von dieser Eigenschaft zurückgegebenen Punkts wirkt sich daher nicht auf die Eigenschaftswerte Left, Right, Top oder Bottom des Steuerelements aus. Um diese Eigenschaften anzupassen, legen Sie jeden Eigenschaftswert einzeln fest, oder legen Sie die Location-Eigenschaft mit einem neuen Point fest.

8
shf301

Wenn balancePanel nicht funktioniert, können Sie Folgendes verwenden:

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

oder

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

Sie müssen den gesamten Punkt an den Ort übergeben

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

Wenn die gesperrte Eigenschaft des übergeordneten Bereichs auf true festgelegt ist, konnten wir die location -Eigenschaft nicht ändern, und die location -Eigenschaft verhält sich bis zu diesem Zeitpunkt als schreibgeschützt.

0
Praveen