====== Setting Properties at Runtime ====== 기본적으로 Visual Studio의 모든 콘트롤들은 속성이 바뀔때마다 바뀐내용을 그즉시 표시합니다. 때로는 이것이 오히려 이상한 결과를 초래하기도 합니다. ===== 문제가 되는 상황 ===== 예를들어, PLC((프로그래머블 로직 콘트롤러))에서 읽어온 값을 화면에 표시하는 경우에, 읽어온 값이 그 즉시 콘트롤에 반영되어 아래와 같이 화면에 표시됩니다. 그리는 과정이 모두 보이게 됨으로써 오히려 혼란스러워 보입니다. 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); } {{ .:suspenddrawoff.mp4?427x240 }} ===== 해결방법 ===== 이 경우, ''SuspendDraw'' 메소드 함수를 이용해서 그리는 과정이 보이지 않도록 한뒤, 콘트롤 갱신이 모두 끝난뒤 ''ResumeDraw'' 메소드 함수를 이용해서 최종결과를 한번에 표시하도록 하면, 아래 처럼 깔끔하게 동작되는 화면을 보실 수 있습니다. 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(); } {{ .:suspenddrawon.mp4?427x240 }} 특히 화면이 전환된뒤, 이 방법을 사용하시면 지저분하게 콘트롤들이 표시및 배치되는 과정을 숨기고, 한번에 모든 내용을 표시하도록 할 수 있습니다.