Rectangle.Offset 方法没有效果?

Bli*_*lip 3 .net c# user-interface

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

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

    Invalidate();
}
Run Code Online (Sandbox Code Playgroud)

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

SLa*_*aks 5

Rectangle是值类型。
调用Offset()要么返回一个新Rectangle值,要么修改从属性返回的副本,具体取决于Rectangle您使用的是哪个。

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

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

var rect = selectedRectangle.BoundingBox;
rect.Offset(...);
selectedRectangle.BoundingBox = rect;
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅可变结构弊端

  • 方法“Offset”写得不好,结果它应该返回一个“Rectangle”对象,这将使值复制变得明显。您看不到这样的“字符串”方法。 (2认同)