С# Изменение местоположения объекта программно
Я пробовал следующий код:
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
так вопрос, как я могу это сделать?
Ответы
Ответ 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 будет действовать как чтение только к тому времени.