web-dev-qa-db-fra.com

C # Modifier l'emplacement d'un objet par programme

J'ai essayé le code suivant: 

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

pour modifier l'emplacement d'un panneau que j'ai créé en mode conception pendant l'exécution du programme, mais une erreur est renvoyée: 

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

alors la question est comment puis-je le faire?

36
Ahoura Ghotbi

La propriété Location a le type Point qui est une structure.

Au lieu d'essayer de modifier la Point existante, essayez d'affecter un nouvel objet Point:

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

Location est une structure. S'il n'y a pas de membre pratique, vous devrez réaffecter l'emplacement complet:

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

La plupart des structures sont également immuables, mais dans le cas rare (et déroutant) de mutabilité, vous pouvez également copier, éditer, copier;

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

Bien que je ne recommande pas ce qui précède, puisque les structures devraient idéalement être immuables.

15
Marc Gravell

Si BalancePanel ne fonctionne pas, vous pouvez utiliser ceci:

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

ou

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

Vous devez passer le point entier à l'emplacement

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

Lorsque la propriété verrouillée du panneau parent est définie sur true, nous ne pouvons pas modifier la propriété location et celle-ci se comportera comme si elle était en lecture seule.

0
Praveen