Rectangle.Offset方法没有效果?

时间:2013-12-29 14:15:26

标签: c# .net user-interface

我在这个超级简单的绘图程序中有这段代码:

if (isMovingRectangle())
{
    selectedRectangle.BoundingBox.Offset(
    currentMousePos.X - mousePosWhenDown.X,
    currentMousePos.Y - mousePosWhenDown.Y);

    Invalidate();
}

每次MouseMove事件发生时我都会执行这些语句,但为什么Offset方法不会影响selectedRectangle的位置?非常感谢你的回答。

1 个答案:

答案 0 :(得分:3)

Rectangle是一种值类型 调用Offset()可返回新的Rectangle值,也可以修改从属性返回的副本,具体取决于您使用的Rectangle

您需要将新的Rectangle值分配回属性。

System.Drawing.Rectangle结构中,Offset()方法会改变该值,因此您需要保存该值:

var rect = selectedRectangle.BoundingBox;
rect.Offset(...);
selectedRectangle.BoundingBox = rect;

有关详细信息,请参阅evils of mutable structs