繁体   English   中英

c#-获取窗体的矩形

[英]c# - Get Rectangle of Form

我正在用C#制作汽车动画,并想测试汽车是否仍在Window中。 我使用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'尝试过,它在静态属性中似乎也是无效的。 如果我将Property更改为非静态,则在当前上下文中此无效。

稍后,我将使用if(!Window.Contains(car.CarShape))进行检查if(!Window.Contains(car.CarShape))

我如何才能将Window设置为矩形,或者是否有更好的方法来测试汽车是否仍在窗口内?

问题必须是尝试在定义中初始化变量。 做这个:

1-将变量声明为:

public Rectangle win { get; } 

2-然后在表单的构造函数中:

public Form1()
{
    InitializeComponent();
    Startcars();
    win = new Rectangle(new Point(0, 0), this.Size);
}

正如@Lithium在评论中所说,您不应将Window命名为变量,因为它可能会造成混淆。 遵循C#中的命名约定始终是一个好主意

编辑

您还应该使用this.ClientRectangle而不是this.Size (感谢Reza Aghaei指出这一点。

Form的Size属性不是静态的,因此您不能使用返回Form的Size属性的静态属性。

一种更简单的方法是使用ClientRectangle属性,如下所示:

if (ClientRectangle.Contains(CarShape))
{

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM