我在这个超级简单的绘图程序中有这段代码:
if (isMovingRectangle())
{
selectedRectangle.BoundingBox.Offset(
currentMousePos.X - mousePosWhenDown.X,
currentMousePos.Y - mousePosWhenDown.Y);
Invalidate();
}
每次MouseMove事件发生时我都会执行这些语句,但为什么Offset方法不会影响selectedRectangle的位置?非常感谢你的回答。
答案 0 :(得分:3)
Rectangle
是一种值类型
调用Offset()
可返回新的Rectangle
值,也可以修改从属性返回的副本,具体取决于您使用的Rectangle
。
您需要将新的Rectangle
值分配回属性。
在System.Drawing.Rectangle
结构中,Offset()
方法会改变该值,因此您需要保存该值:
var rect = selectedRectangle.BoundingBox;
rect.Offset(...);
selectedRectangle.BoundingBox = rect;
有关详细信息,请参阅evils of mutable structs。