【问题标题】:c# - Get Rectangle of Formc# - 获取表格的矩形
【发布时间】:2017-03-03 10:15:43
【问题描述】:

我正在使用 C# 制作汽车动画,并想测试汽车是否仍在窗口中。我用 Windows-Forms Designer 创建了一个表单。

我有一个矩形的汽车:

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))检查它

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

【问题讨论】:

  • 为什么将Window声明为static
  • 首先,不要使用Window作为你的属性名,因为它是winforms中的一个通用类。其次,该属性不能是静态的,因为 Form1 类没有大小,但该类的实例有大小。然后照 Pikoh 说的去做。
  • 如何获取Form1的实例?我必须制作一个新的 Form1() 吗?也许是一个愚蠢的问题,但我是 C# 新手...
  • this.ClientRectangle 是您正在寻找的。​​span>
  • @RezaAghaei 好点,谢谢。

标签: c# winforms window rectangles


【解决方案1】:

问题一定是试图在定义中初始化你的变量。这样做:

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 指出。

【讨论】:

  • 谢谢,工作。属性名称更改为 Win 而不是 Window。 :)
【解决方案2】:

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

更简单的方法是像这样使用ClientRectangle 属性:

if (ClientRectangle.Contains(CarShape))
{

}

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多