티스토리 뷰

C# 은 역시 생각하는데로 만들 수 있다는걸 또 한번 알았습니다.


UserControls라는 것은 윈폼과는 조금 다르게 폼 형식이 아닌 Control 형식으로 이루어져 있습니다.


가령 버튼이나, 패널, textBox 등으로 만들 수 있단 말이죠.


이것을 사용하게 된 이유는 무엇인고 하니,


초기 개발 단계에서는  MDI를 이용해서 여러폼을 불러오는 과정을 겪어서 필요를 못느꼈지만,


재개발.. 뭐 한마디로 다시 뒤엎는 과정속에서 하나의 폼 위에 여러패널을 띄우는 방법으로 바뀌게 되면서 찾게 되었습니다.



기존의 MDI 폼 형식은 여러 폼을 띄우기 때문에, 가각의 리소스에는 각각의 폼이 로드 되면 문제가 안됬지만


지금의 형식에서는 여러 패널들을 띄워야 하기 때문에


하나의 폼 위에 여러개의 패널을 띄워 놔야 하기 때문에 편집이나 보는것에 문제가 생겨서


혹시 이런게 있지 않을까 하고 찾아 봤습니다.



그래서 나온 것이 바로 usercontrols 입니다.


솔루션에 그림 형식으로 보자면 




과 같이 폼과는 조금 다르게 되어 있습니다.



usercontrol을 추가 하고 윈폼과 동일하게 만든다음에





위의 코드와 같이


UserControl 이라는 클래스를 추가 하고, MainPanel에 불러오면 되겠습니다.



지금 소스는 usercontrols 소스가 아닌 main에서 Load 하는 소스이구요


소스 분할 과정을 통해서 나눠 놓은 소스 중 일부입니다.


Button16 을 click 하게 되면 MainPanel 에 UC1이라는 Usercontrols 를 보이게 하며


MainPanel.Controls.Add 라는 것에서 유추해서 Clear가 있지 않을까 해서 쳐봤더니 있더군요..


그래서 불러오기 전에 MainPanel 을 clear 시키게 된 코드가 저것입니다.




여담 1


오른쪽 솔루션탐색기를 보시면 Main도 3개나 나눠져 있고


SubPanel 안으로 6개의 항목이 나눠져 있습니다.


소스 관리라 하면, 굉장히 귀찮고 힘들고 짜증나는 작업이지만, 미래를 내다본다면 언제고 해야 하는 작업중 일부죠


소스를 관리하고, 규정하고 다듬고 등의 과정을 거쳐서 조금 더 완벽해지는 코드를 만들어 나가는 것이


주 목표라고 생각하고 코딩하는 습관을 들이는 것이 중요하다고 생각합니다.



여담 2


MDI 폼 형식으로 Parents Child 로 나뉘었을때 귀찮았던 단점이 바로 global 변수의 사용 이였는데요


지금의 여러 패널을 불러오게 되면 장점중 하나가 굳이 global을 안써도..


어차피 하나의 윈폼에서 여러 패널들을 불러오기 때문에 public 으로 써서 공공의 값들을 쓰면 참 편하다는 것을 알았녜요..


뭐 public 도 그렇다면 private 으로 해서 get 하셔도 되긴하지만..


예를 들자면 어느 폼에서 로그인 한사람의 ID 를 알고 싶다면


처음에 로그인 시( 로그인 폼은 따로 있다라는 전제 하 입니다.. )에 아이디 또는 해당 아이디 번호 값( 전 사번을 이용하고 있습니다 )을 메인 폼이 갖고 있고


아이디를 불러와야 하는 경우가 생긴다면


그 값을 불러와서 검색하는 경우에 씁니다.

댓글
댓글쓰기 폼