2017-03-03 9 views
1

私はC#でカーアニメーションを作成していますが、車がまだウィンドウにあるかどうかをテストします。 Windowsフォームデザイナでフォームを作成しました。C# - フォームの長方形を取得する

私は車の四角形を持っている:

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

なぜ宣言 'Window'as' static'? – Pikoh

+0

まず、winformsの共通クラスであるため、プロパティの名前としてWindowを使用しないでください。次に、Form1クラスにはサイズがないのでそのプロパティを静的にすることはできません。クラスにはサイズがありますし、Pikohが言ったことをしてください。 – Lithium

+0

Form1のインスタンスを取得するにはどうしたらいいですか? w Form1()?たぶん愚かな質問ですが、私はC#の初心者です... –

答えて

3

。これを行う:@Lithiumコメントで言うように

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

、あなたがWindowに名前を付けるべきではありません。そして、フォームのコンストラクタで

public Rectangle win { get; } 

:2-

1-として変数を宣言します混乱する可能性があるため、変数に追加します。これは、C#でNaming Conventionsに従うことを常に良い考えです

あなたはまた、それを指摘するためにthis.ClientRectangleの代わりに、this.Size(感謝レザAghaeiを使用する必要があります

編集。

+0

ありがとう、働いた。 Windowの代わりにPropertyの名前がWinに変更されました。 :) –

2

フォームのSizeプロパティは静的ではないため、フォームのSizeプロパティを返す静的プロパティは使用できません。

簡単な方法は、次のようClientRectangleプロパティを使用することです:問題は定義の中であなたのvaribleを初期化しようとしなければならない

if (ClientRectangle.Contains(CarShape)) 
{ 

} 
関連する問題