有没有一个核心的c# Rectangle类在它不应该't的地方不是只读的?
本文关键字:方不 只读 核心 有一个 Rectangle 不应该 | 更新日期: 2023-09-27 18:16:05
Point
有X
和Y
,它们是可以改变的。但是 Rectangle
使Left
、Top
、Right
、Bottom
只读。为了使事情更有趣,Width
和Height
是可写的。因此,要移动Rectangle
,您需要更改Offset
并更改Width
和Height
,而您只需相应地更改TLRB
的值。
是否有任何真正的Rectangle
类我错过了这些值可写,所以我不必在更新内部值时获得创意?如RECT
?
PS:目前使用Rectangle.FromLTRB
,但我输入的方式比我应该只是改变Top
的值。
是的,你错过了一些东西。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
。
不可设置的属性有:Top
、Bottom
、Left,
、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.