有没有一个核心的c# Rectangle类在它不应该't的地方不是只读的?

本文关键字:方不 只读 核心 有一个 Rectangle 不应该 | 更新日期: 2023-09-27 18:16:05

Point XY,它们是可以改变的。但是 Rectangle 使LeftTopRightBottom只读。为了使事情更有趣,WidthHeight是可写的。因此,要移动Rectangle,您需要更改Offset并更改WidthHeight,而您只需相应地更改TLRB的值。

是否有任何真正的Rectangle类我错过了这些值可写,所以我不必在更新内部值时获得创意?如RECT ?

PS:目前使用Rectangle.FromLTRB,但我输入的方式比我应该只是改变Top的值。

有没有一个核心的c# Rectangle类在它不应该't的地方不是只读的?

是的,你错过了一些东西。Top是只读的,但是只有

public int Top
{
    get
    {
        return this.Y;
    }
}

Y是可写的。如果你想改变Top,只需要改变y

public int Left
{
    get
    {
        return this.X;
    }
}

X是可写的。宽度和高度也是可写的。如果你坚持顶部== Y/左== X +宽度+高度,你可以改变现有的矩形(系统)。画矩形(我猜)没有任何问题。

System.Drawing.Rectangle具有以下可设置的公共属性X, Y, Width, Height

不可设置的属性有:TopBottomLeft,Right。虽然这些都是通过可设置属性间接设置的。如果您查看上面链接的Rectangle MSDN文章,您可以看到不可设置属性是如何计算的。

  • Top就是Y
  • Bottom就是Y - Height
  • Left就是X
  • Right只是x分量X + Width

我认为你可以在已经定义的Rectangle类中做你需要做的一切,通过设置可设置的属性和其他不可设置的属性的计算方式。

编辑:看来你是对的,并提供了一个更好的解决方案,在不同的情况下,你可以写你自己的矩形类:

class Point
{
    public double X;
    public double Y;
}
class Rectangle
{
    public Point TopLeft;
    public double Width;
    public double Height;
}

如果你想的话,你可以创建返回点的方法。如果您想修改原始类的行为,您也可以将该类作为原始类的包装器。

您可以这样做:

Rectangle initialRect;
....some other code

initialRect = new Rectangle(new Point(0,0), 100, 100);

initialRect = new Rectangle(0, 0, 100, 100);

//include offset as needed.
initialRect = new Rectangle(initial.X, initial.Y, initial.Width, initial.Height);

如果你谈论的是System.Drawing.Rectangle结构体,它有可写的X和Y属性,就像Point.