2017-03-03 4 views
1

나는 C#에서 자동차 애니메이션을 작업하고 있으며 자동차가 여전히 Window에 있는지 테스트하려고합니다. Windows Forms 디자이너로 양식을 만들었습니다.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

고마워, 근무했다. 속성 이름이 창 대신 승으로 변경되었습니다. :) –

2

양식의 Size 속성은 정적이 아니므로 양식의 Size 속성을 반환하는 정적 속성을 사용할 수 없습니다.

쉬운 방법은이 같은 ClientRectangle 속성을 사용하는 것입니다 : 문제는 정의에 varible를 초기화하는해야

if (ClientRectangle.Contains(CarShape)) 
{ 

}