Подтвердить что ты не робот

С# Изменение местоположения объекта программно

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

        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

так вопрос, как я могу это сделать?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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;

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

Ответ 3

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

balancePanel.Left = optionsPanel.Location.X

или

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

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

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

Ответ 4

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

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

или

anotherObject.Location = new Point(127,283)

Ответ 5

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

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

Ответ 6

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