사용자 도구

사이트 도구

English

jcontrols_cf35:setting_properties_at_runtime

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
jcontrols_cf35:setting_properties_at_runtime [2016/03/23 11:38]
Comfile Technology [해결방법]
jcontrols_cf35:setting_properties_at_runtime [2016/04/14 09:46] (현재)
줄 1: 줄 1:
 +====== Setting Properties at Runtime ======
 +기본적으로 Visual Studio의 모든 콘트롤들은 속성이 바뀔때마다 바뀐내용을 그즉시 표시합니다. 때로는 이것이 오히려 이상한 결과를 초래하기도 합니다. ​
 +===== 문제가 되는 상황 =====
 +예를들어,​ PLC((프로그래머블 로직 콘트롤러))에서 읽어온 값을 화면에 표시하는 경우에, 읽어온 값이 그 즉시 콘트롤에 반영되어 아래와 같이 화면에 표시됩니다. 그리는 과정이 모두 보이게 됨으로써 오히려 혼란스러워 보입니다.
 +<code csharp>
 +void UpdateLamp(bool isOn)
 +{
 +    // Lamp will redraw here...
 +    lamp.IsOn = isOn;
 +
 +    // ...here...
 +    lamp.Text = lamp.IsOn ? "​ON"​ : "​OFF";​
 +
 +    // ...and here...
 +    lamp.Font = new Font(Font.Name,​ Font.Size, lamp.IsOn ? FontStyle.Bold : FontStyle.Regular);​
 +}
 +</​code>​
 +
 +
 +{{ .:​suspenddrawoff.mp4?​427x240 }}
 +
 +===== 해결방법 =====
 +이 경우, ''​SuspendDraw''​ 메소드 함수를 이용해서 그리는 과정이 보이지 않도록 한뒤, 콘트롤 갱신이 모두 끝난뒤 ​ ''​ResumeDraw''​ 메소드 함수를 이용해서 최종결과를 한번에 표시하도록 하면, 아래 처럼 깔끔하게 동작되는 화면을 보실 수 있습니다.
 +
 +<code csharp>
 +void UpdateLamp(bool isOn)
 +{
 +    lamp.SuspendDraw();​
 +    ​
 +    // lamp will not redraw here
 +    lamp.IsOn = isOn;
 +
 +    // ...or here...
 +    lamp.Text = lamp.IsOn ? "​ON"​ : "​OFF";​
 +
 +    // ...or here...
 +    lamp.Font = new Font(Font.Name,​ Font.Size, lamp.IsOn ? FontStyle.Bold : FontStyle.Regular);​
 +    ​
 +    // lamp will redraw here
 +    lamp.ResumeDraw();​
 +}
 +</​code>​
 +
 +{{ .:​suspenddrawon.mp4?​427x240 }}
 +
 +
 +
 +특히 화면이 전환된뒤,​ 이 방법을 사용하시면 지저분하게 콘트롤들이 표시및 배치되는 과정을 숨기고, 한번에 모든 내용을 표시하도록 할 수 있습니다.