我尝试了以下代码:
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
那我该怎么做呢?
答案 0 :(得分:61)
Location
属性的类型Point
是结构。
尝试分配新的Point
对象,而不是尝试修改现有的Point
:
this.balancePanel.Location = new Point(
this.optionsPanel.Location.X,
this.balancePanel.Location.Y
);
答案 1 :(得分:15)
位置是一个结构。如果没有任何便利成员,您需要重新分配整个位置:
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;
虽然我不推荐上述内容,因为结构理想情况下应该是不可变的。
答案 2 :(得分:8)
使用:
balancePanel.Left = optionsPanel.Location.X
或
balancePanel.Location = new Point(optionsPanel.Location.X, balancePanel.Location.Y)
因为Point类是值类型(Visual Basic中的结构, 在Visual C#中的struct,它是按值返回的,意味着访问 property返回控件左上角的副本。所以, 调整从此返回的Point的X或Y属性 属性不会影响Left,Right,Top或Bottom属性 控制的值。要调整这些属性,请设置每个属性 单独使用值,或使用新Point设置Location属性。
答案 3 :(得分:3)
如果以某种方式找不到balancePanel,你可以使用它:
this.Location = new Point(127,283);
或
anotherObject.Location = new Point(127,283)
答案 4 :(得分:1)
您需要将整个点传递到位置
var point = new Point(50, 100);
this.balancePanel.Location = point;
答案 5 :(得分:0)
当父面板的锁定属性设置为true时,我们无法更改位置属性,并且location属性将在那时只读取。