C # Изменить местоположение объекта программно - PullRequest
37 голосов
/ 03 декабря 2011

Я попробовал следующий код:

 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

Так как я могу это сделать?

Ответы [ 6 ]

63 голосов
/ 03 декабря 2011

Свойство Location имеет тип Point, который является структурой.

Вместо попытки изменить существующий Point, попробуйте назначить новый объект Point:

 this.balancePanel.Location = new Point(
     this.optionsPanel.Location.X,
     this.balancePanel.Location.Y
 );
15 голосов
/ 03 декабря 2011

Местоположение является структурой.Если нет удобных членов, вам нужно переназначить все расположение:

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;

Хотя я не рекомендую выше, так как в идеале структуры должны быть неизменными.

8 голосов
/ 03 декабря 2011

Используйте:

balancePanel.Left = optionsPanel.Location.X

или

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

См. документацию о местоположении :

Поскольку класс Point является типом значения (структура в Visual Basic, структура в Visual C #), он возвращается по значению, то есть при доступе к свойству возвращается копия верхней левой точки элемента управления.,Таким образом, изменение свойств X или Y для точки, возвращаемой из этого свойства, не повлияет на значения свойств элемента управления Left, Right, Top или Bottom.Чтобы настроить эти свойства, установите каждое значение свойства индивидуально или установите свойство Location с новой точкой.

3 голосов
/ 23 ноября 2012

Если каким-то образом BalancePanel не будет работать, вы можете использовать это:

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

или

anotherObject.Location = new Point(127,283)
1 голос
/ 03 декабря 2011

Вам нужно передать всю точку в локацию

var point = new Point(50, 100);
this.balancePanel.Location = point;
0 голосов
/ 01 мая 2017

Когда родительская панель имеет свойство locked, установленное в true, мы не можем изменить свойство location, и свойство location к этому времени будет работать только для чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...