2017-03-03 5 views
1

Ich arbeite an einer Auto-Animation in C# und möchte testen, ob das Auto noch im Fenster ist. Ich habe ein Formular mit dem Windows-Forms Designer erstellt.C# - Get Rectangle of Form

Ich habe ein Rechteck von dem Auto:

public Rectangle CarShape { get; set; } 
... 
CarShape = new Rectangle(Pos, new Size(28, 62)); 

Und meine Form1 Klasse:

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); 
... 
} 

Hier erhalte ich die Fehlermeldung: „Eine Objektreferenz für das nicht-statische Feld erforderlich ist, Methode oder Eigenschaft 'Form.Size' ".

Ich habe es auch mit 'dieser' versucht, die in einer statischen Eigenschaft auch ungültig zu sein scheint. Wenn ich die Eigenschaft in nicht statisch ändere, wird dies im aktuellen Kontext ungültig.

Später werde ich es mit if(!Window.Contains(car.CarShape))

überprüfen Wie kann ich das Fenster als ein Rechteck erhalten oder gibt es eine bessere Art und Weise der Prüfung, ob das Auto noch innerhalb des Fensters ist?

+0

Warum erklärt 'Window'as' static'? – Pikoh

+0

Verwenden Sie nicht zuerst Window als den Namen Ihrer Eigenschaft, da es sich um eine allgemeine Klasse in winforms handelt, zweitens kann diese Eigenschaft nicht statisch sein, da die Klasse Form1 keine Größe hat, sondern die Instanz Die Klasse hat eine Größe, dann tu das, was Pikoh gesagt hat. " – Lithium

+0

Wie kann ich die Instanz von Form1 bekommen? Muss ich eine ne machen? w Form1()? Vielleicht eine dumme Frage, aber ich bin neu in C# ... –

Antwort

3

Das Problem muss versuchen, Ihre varible in der Definition zu initialisieren. Tun Sie dies:

1- Deklarieren Sie die Variable wie:

public Rectangle win { get; } 

2- dann in der Konstrukteurs-Form:

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

Wie @Lithium in einem Kommentar sagt, sollten Sie nicht Window nennen zu der Variable, wie es verwirrend sein kann. Es ist immer eine gute Idee, die Naming Conventions in C#

bearbeiten

Sie sollten auch this.ClientRectangle statt this.Size (dank Reza Aghaei es für den Hinweis auf verwenden zu folgen.

+0

Danke, arbeitete. Der Name der Eigenschaft wurde anstelle von Fenster in Win geändert. :) –

2

Die Eigenschaft Size des Formulars ist nicht statisch, daher können Sie keine statische Eigenschaft verwenden, die die Size -Eigenschaft des Formulars zurückgibt.

Eine einfachere Möglichkeit wäre, die ClientRectangle Eigenschaft wie folgt zu verwenden:

if (ClientRectangle.Contains(CarShape)) 
{ 

}