2017-05-09 1 views
0

Windows 양식에서 그래픽 작업을하고 있습니다. 그래픽 클래스 Grafika()을 호출하는 양식 자체 (form1)를 전달해야하므로 드로잉 중에 form1.CreateGraphics()을 사용하여 특정 양식을 그릴 수 있습니다.그래픽에 인수로 양식 전달 C#

그래픽 클래스 Grafika의 생성자는 다음과 같습니다

public Grafika(ref Form predan) 
{ 
    grafika=predan.CreateGraphics(); 
    //drawing on the form 
} 

은 어떻게 사용할 수 있도록 Grafika의 생성자에 양식을 통과?

+2

는 그래픽 객체를 캐시하지 마십시오! – TaW

+1

'CreateGraphics'를 호출하는 코드는 99.9 %가 잘못 될 가능성이 있습니다. 이것이 예외라고 생각하는 이유는 없습니다. 모든 그림은'Paint' 이벤트에 대한 응답으로 수행되어야합니다.이 이벤트는 사용할 그래픽 객체를 제공합니다. –

+0

e.Graphics 객체를 실제 드로잉을 수행하지만 거기에 저장하지 않는 메소드 나 클래스에 전달하는 것은 의미가 있습니다 (무효가 될 것입니다). 일시적으로 새로운 것을 생성하는 것은 물론 제대로 작동 할 것입니다. – TaW

답변

0

의 한 형태했다입니다. 당신이 심판을 제거하면 그렇게처럼 전달할 수 있습니다

//From Form1 
Grafika g = new Grafika(this); 
//If called from the From, 'this' will be the form itself 

또한 당신의 생성자는 다음과 같아야합니다

public Grafika(Form1 predan)//Notice Form1 instead of just Form 
{ 
    grafika=predan.CreateGraphics(); 
    //drawing on the form 
} 
+0

나는 그것을 시도했다. 그러나 나는 "키워드"를 얻었다. 이것은 현재의 컨텍스트에서 사용 가능하지 않다. 더 많은 연구를 한 결과, 나는 외부의 형식이 아닌 메서드 내에서 그것을 호출해야한다는 것을 알게되었다. 저를 올바른 길로 데려 오기위한 TY입니다. –

+0

Form1에 클래스를 만들 때 예. 다행히 도왔다! – EpicKip

0

게시자와 마찬가지로 양식 생성자에게 해당 양식의 매개 변수를 허용하게하십시오. 그러나 Form은 참조 유형 자체이므로 ref 키워드가 필요하지 않습니다. 당신이 ref를 사용하지 않는 함께 그것을 통과해야하는 경우 여기 Form1 당신을 고려하여 특정 Form 객체는 그 이름

public Grafika(Form1 predan) 
{ 
    grafika=predan.CreateGraphics(); 
    //drawing on the form 
}