it-swarm.com.ru

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

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

        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

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

36
Ahoura Ghotbi

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

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

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

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

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;

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

15
Marc Gravell

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

balancePanel.Left = optionsPanel.Location.X 

или же

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

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

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

8
shf301

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

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

или же

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

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

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

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

0
Praveen