我正在研究C#中的汽车动画,并想测试汽车是否还在窗口中。我使用Windows窗体设计器创建了一个表单。
我有一个汽车的矩形:
public Rectangle CarShape { get; set; }
...
CarShape = new Rectangle(Pos, new Size(28, 62));
我的Form1课程:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Startcars();
}
//Here is my Question:
public static Rectangle Window { get; } = new Rectangle(new Point(0,0),Form1.Size);
...
}
这里我得到错误:“非静态字段,方法或属性'Form.Size'需要对象引用。”
我也尝试过'this',这在静态属性中似乎也是无效的。如果我将属性更改为非静态,则在当前上下文中将其无效。
稍后我将使用if(!Window.Contains(car.CarShape))
如何将窗口设为矩形或者是否有更好的方法可以测试汽车是否仍在车内?
答案 0 :(得分:3)
问题必须是尝试在定义中初始化varible。这样做:
1-将变量声明为:
public Rectangle win { get; }
2-然后在表单的构造函数中:
public Form1()
{
InitializeComponent();
Startcars();
win = new Rectangle(new Point(0, 0), this.Size);
}
正如@Lithium在评论中所说,你不应该为变量命名Window
,因为它可能会令人困惑。遵循C#中的Naming Conventions
修改强>
您还应该使用this.ClientRectangle代替this.Size
(感谢Reza Aghaei指出它。
答案 1 :(得分:2)
表单的Size
属性不是静态的,因此您无法使用返回表单Size
属性的静态属性。
更简单的方法是使用ClientRectangle属性,如下所示:
if (ClientRectangle.Contains(CarShape))
{
}