예전 자유 게시판

GDI+ 프로그램 실습중에 11장에서 생긴 의문입니다.

황인준 2004-03-06 13:03

안녕하십니까?

전 얼마전에 GDI+ 5장의 예제에 관해 질문했던 독자입니다...

다름이 아니라 요즘은 11장을 보고있는데요.

한가지 의문점이 생겨서 이렇게 게시판을 두드리게 되었습니다.

11장의 "속성의 기본값을 가진 사용자 지정 컨트롤 예제(353쪽)"에서 말입니다.

디자인 타임에서 속성 변경을 지원 도록 해주도록하는 내용은 이해했는데요.

머...텍스트 문자열 카운트 변수라든지, 색상이라든지, 폰트 그리고 텍스트 표시 방향등은
디자인 모드에서 변경시 바로 업데이트 되어 갱신되는것을 확인할 수 있었습니다.

그런데 말입니다... 제가 궁금한 사항은 이렇게 만든 Custom Control 의 텍스트 속성을 변경시는
바로 갱신되지 않는다는 점입니다.  
물론 그렇게 되도록 하는 attribute 설정을 추가적으로 하지 않았기 때문이겠죠...(제 생각에는...)

이렇경우 어떻게 해야 되지요?

위와 같이 굳이 따로 설정해 주지 않아도 프라퍼티 그리드에서 Text 라는 속성 항목을
볼 수 있는것으로 봐서는 상위 클래스에서 그런 사항이 이미 정의되 있는걸로
판단 되기도 하는데 말입니다.

텍스트를 변경하자 마자 바로 변경이 반영되도록 하려면 어떻해야 합니까?
제가 해본바로는 잠시 그 컨트롤을 표시하는 텝페이지를 잠시 다른 페이지로 전환하고
돌아온다는가 하는식의 경우에 화면이 갱신되어 업데이트가 되더군요...
Paint 이벤트와 관련이 있는지요?

답변 주시면 감사하겠습니다....


류광 2004-03-07 14:03

이상하네요? IDE에서 속성을 변경하면 해당 속성의 set이 호출되고 그 set 안에서 Invalidate를 호출하면 Paint 이벤트가 발생되고 그러면 컨트롤의 Paint 이벤트 핸들러에서 컨트롤을 다시 그리는 것 외에 특별한 어떤 마법은 없는 걸로 알고 있습니다.

혹시 Text 속성의 set에서 Invalidate를 호출하지 않았다거나, Paint 이벤트 처리기에서 새 Text를 그려주지 않은 건 아닐까요?

황인준 2004-03-08 15:03

그렇다면 Invalidate()를 실행하기 위해서 어떻게 해야 할까요?
Text 속성은 이미 Control.Text 로 정의가 되어있으므로 동일한 Text 속성을 재정의해 주기 그렇고 Text2 라는 속성을 만들고 거기에 반환값을 Text 로하면서 Invalidate()를 넣어주는 프로퍼티를 새로 만들어야 하나요?

류광 2004-03-08 16:03

아 부모에 이미 정의되어 있는 Text 속성 이야기였군요... 그럼 잘 모르겠습니다.

11 장에서는 그냥 DisplayText라는 이름의 새로운 속성을 정의하네요...

류광 2004-03-08 16:03

아 Text 속성을 재정의하면 되지 않을까요? public override string Text{ ... set {...}에서 Invalidate를 호출하는 식으로요....

황인준 2004-03-09 11:03

그렇군요 알겠습니다.....
저도 시도 해봤는데... new 를 통해 새로 정의 하든지 override 하라고 메세지가 나오더 군요.
답변 감사드립니다...