2009-12-15 3 views
2

클래스의 2 가지 속성을 기반으로 패널에 버튼을 동적으로 그려주는 C# Win Forms 응용 프로그램이 있습니다. 행과 열.대화 상자의 설정 업데이트시 C# 다시로드/다시 그리기

두 개의 텍스트 상자를 사용하여 이러한 속성을 설정하는 대화 상자가 열립니다.

"save"라는 대화 상자에 버튼이 있습니다.이 버튼을 누르면 기본 클래스의 속성 (행, 열)이 설정된 값으로 업데이트됩니다.

적용된 새 설정 (행 및 열)에 따라 기본 폼에서 동적으로 그려진 단추를 다시 그려야합니다. 어떻게해야합니까?

편집 :

새로 고침이 작동하지 않습니다.

또 다른 중요한 메모 : "Form1_Load"메서드에서 버튼을 동적으로 그립니다.

+0

일부 코드를 게시하면 코드 예제와 같이보다 정확한 답변을 얻을 수 있습니다. –

답변

4

기본적으로 컨트롤을 강제로 다시 그리기 (Refresh(), Update() 및 Invalidate())하는 세 가지 방법이 있습니다. Adam Robinson이 지적했듯이 사용자 정의 페인팅을 사용하는 가장 쉬운 방법은 Paint 이벤트를 재정의하는 것입니다. 모든 그림 논리를 여기에 넣으십시오. PaintEventArgs 매개 변수에서 제공하는 Graphics 객체를 사용합니다.

위의 호출의 차이점은 무엇입니까?

은 무효화는 다시 그리기의 필요에 따라서 제어 (지역, 또는 RECT)를 표시하지만, 바로 (다른 모든 돌봐 된 앱이 유휴 상태가 될 때 다시 그리기가 트리거) 그려지지 않습니다.

업데이트은 부분이 무효화되면 즉시 다시 그립니다.

새로 고침은 컨트롤이 무효화 된 다음 업데이트 (즉, 즉시 다시 그립니다)합니다.

특정 요구가있는 경우가 아니면 Invalidate()를 사용하는 것이 좋습니다. 대부분의 경우 프로그램을보다 효율적으로 만듭니다. 이렇게하면로드 이벤트에 페인트 논리가 필요하지 않습니다. Load 이벤트에서 수행하는 작업에 따라 양식을 표시하기 전에이 내용을 덮어 쓰고 무효화하는 것이 좋습니다.

+0

OnPaint 메서드 재정의를 사용하고 있습니다. 버튼이 전혀 표시되지 않습니다. 또한 Form1_Load 메서드가 있어야하는데, 지금은 아무것도 가지고 있지 않습니다. Form1_Load 메서드에 Button 생성 코드가있을 때 최소한 버튼을 그리는 것이 었습니다. – Sev

+0

그래서 어디에서 exatcly OnPaint를 무시하고 있습니까? 양식 자체? 이 경우 양식을 그릴 것입니다. 그러나 포함 된 컨트롤은 그리는 항목 위에 표시됩니다. 사용자 정의 컨트롤을 만들고 싶은 것처럼 들립니다. 정확히 무엇을하려고하고 코드를 게시 하시겠습니까? – Pedery

+0

잘 대답 해 주셔서 감사합니다. 그것은 내 문제를 직접적으로 돕지는 못했지만 올바른 방향으로 나를 인도 해주었습니다. – Sev

0

Panel.Refresh는()

모든 자식 컨트롤의 다시 그리기를 강요 할 것이다.

+0

이 작동하지 않습니다 ... – Sev

0

양식의 Paint 외부의 그림을 그리지 않아야합니다. 이것이 양식이 올바르게 다시 그리지 않는 이유입니다. 사용자 정의 도면을 거기로 이동하면 다시 그리기가 정상적으로 작동합니다.

+0

내가 그걸 시도하면 Form1_Load라는 메서드가 없다는 오류가 발생합니다. – Sev

+1

당신이 말하는 것을 이해하지 못합니다. 'Load' 이벤트에서 드로잉을하지 말고'Paint' 이벤트에서하십시오. 다시, ** Form1_Load' **에서 드로잉을하지 마십시오. 이것이 문제의 근원입니다. –

+0

Form1_Load 메서드를 삭제하고 불만을 제기하는 경우 Form1.Designer.cs 등에서 참조 되었기 때문일 수 있습니다. 필요한 경우 삭제하십시오. –

관련 문제