0

我有一个问题,当我尝试重新定位一个名为 的面板时pPan,我有两种不同的方法来做到这一点:

在我写的按钮的点击事件中

pPan.Location = new Point (
  pPan.Location.X +10 , pPan.Location.Y );

或者我可以写:

pPan.Location.X += 10;

那么这里有什么区别呢?我为什么要创建这个new Point

4

3 回答 3

2

如果Pointstruct,则必须使用第一个,因为当您调用该属性时,它会返回 的副本Location,并且您尝试修改该副本。

于 2013-04-21T08:16:45.167 回答
2

Location 属性的类型是 Point,它是一个结构。你可能会收到类似的错误

无法修改“System.Windows.Forms.Control.Location”的返回值,因为它不是变量

当你设置它的 X、Y 值时。

但您可以分配新的 Point 对象:

pPan.Location = new Point (
  pPan.Location.X +10 , pPan.Location.Y );

Control.Location财产

因为 Point 类是一个值类型(Visual Basic 中的结构,Visual C# 中的结构),所以它是按值返回的,这意味着访问该属性会返回控件左上角点的副本。因此,调整从该属性返回的 Point 的 X 或 Y 属性不会影响控件的 Left、Right、Top 或 Bottom 属性值。要调整这些属性,请单独设置每个属性值,或使用新点设置 Location 属性。如果 Control 是 Form,则 Location 属性值表示 Form 在屏幕坐标中的左上角。

相关 SO 问题:C# 以编程方式更改对象的位置

于 2013-04-21T08:17:50.353 回答
0

不同之处在于,在第一种方式中,您为 Point 对象分配新内存。第二种方式你只是改变现有对象的属性。

尽可能多地操作现有对象是一种很好的做法。所以我建议你使用第二种方式来改变位置。

于 2013-04-21T08:11:35.793 回答