문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
jcontrols_cf35:setting_properties_at_runtime [2016/03/23 11:37] 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 }} | ||
+ | |||
+ | |||
+ | |||
+ | 특히 화면이 전환된뒤, 이 방법을 사용하시면 지저분하게 콘트롤들이 표시및 배치되는 과정을 숨기고, 한번에 모든 내용을 표시하도록 할 수 있습니다. | ||