以编程方式更改对象的位置

本文关键字:位置 对象 编程 方式更 | 更新日期: 2023-09-27 18:16:29

我试过下面的代码:

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

更改我在设计模式下制作的面板的位置,而程序正在运行,但它返回一个错误:

不能修改System.Windows.Forms.Control的返回值。因为它不是一个变量。

那么我该怎么做呢?

以编程方式更改对象的位置

Location属性类型为Point,是一个结构体。

不要尝试修改现有的Point,而是尝试分配一个新的Point对象:

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

Location是一个结构体。如果没有任何便利成员,则需要重新分配整个Location:

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;

虽然我不推荐上面的方法,因为理想情况下结构应该是不可变的

使用:

balancePanel.Left = optionsPanel.Location.X;

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

参见Location的文档:

因为Point类是一个值类型(Visual Basic中的结构),结构),它是按值返回的,这意味着访问属性返回控件左上角点的副本。所以,调整由此返回点的X或Y属性属性不会影响"左"、"右"、"顶"或"底"属性控件的值。要调整这些属性,请设置每个属性值,或者用新的Point设置Location属性。

如果balancePanel不工作,你可以使用这个:

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

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

您需要将整个点传递给location

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

当父面板的lock属性设置为true时,我们无法更改location属性,此时location属性将表现为只读