본문 바로가기
Program/C# .NET

[C#] Winform Panel 활용하기 / Dock Fill Control 겹침 해제

by 냠만 2024. 7. 2.

[Panel의 역할]

기본적으로 C#을 접하는 대부분의 개발자들이 UI (User Interface)를 구현하기 위해 접한다고 생각합니다. UI를 구성하는 방법론에는 여러 가지가 있습니다만 그중 가장 쉽게 접할 수 있는 두 가지가 Winform과 WPF입니다. (Devops, metro 등 여러 가지 툴이 있으나 이는 추가적으로 원하시면 찾아보시면 될 것 같습니다)

Winform은 짜여진 도구들을 끌어와 쉽게 구현할 수 있는 장점이 있지만 디자이너가 개발자가 개입하기 어려운 환경이므로 커스터마이징이 어렵습니다. 반대로 WPF도 도구를 끌어와 구현할 수 있지만 디자이너를 개발자가 직접 작업을 해야 하므로 확장성이 좋지만 작업성이 안 좋다는 단점이 있습니다. 확장성이 좋다 하는 건 반대로 말하면 개발자가 작업해야 되는 작업량도 늘어난다는 의미이기 때문입니다.

 

그래서 대부분 처음 접하는게 Winform인데 여기서 알아야 할 가장 중요한 Tool 중 하나가 Panel이라고 생각합니다. Panel은 유동적으로 크기에 반응할 수 있으며 Docking이라는 유용한 기능을 제공하기 때문에 화면 구성에 용이합니다.

 

UI란 기본적으로 유저가 사용하기 편한 환경을 구성한다는 점에 가장 큰 의의를 두고 작업을 진행하게 되는데, 보기 좋은 떡이 먹기도 좋다고 눈에 잘 들어오는 인터페이스를 구성해야 접근이 쉽기 때문입니다.

[Panel Dock]

Panel에서 제공하는 Dock기능에는 총 6가지가 있습니다. 위치에 따라 Top, Bottom, Left, Right가 존재하고 가운데 Fill, 그리고 None형식이 존재합니다.

말 그대로 해석하면 되는데 이 Dock을 어떻게 활용하느냐에 따라 구조가 바뀌어지니 잘 생각해서 작업을 진행해야 합니다.

panel dock 형식

 

구성을 어떻게 하는지에 따라 화면의 보여지는 형식이 달라지므로 프로그램 작업 속도에도 많은 영향을 주고 눈으로 보이는 형식에도 정리되어 있음이 확연하게 보이기 때문에 사용에 편리함이 있습니다.

위 사진처럼 어떻게 구성하는지에 따라 위치가 바뀌어집니다.

왼쪽은 Left Right를 구성 후 Top을 구성하였고, 오른쪽은 Left, Top을 구성 후 Right를 사용하여 구성하였습니다.

이처럼 구성하는 순서에 따라 Dock위치가 달라지므로 항상 순서를 고려하면서 배치해야 합니다.

 

다만 위와같이 Dock Fill을 활용하는 경우 컨트롤이 겹치는 난감한 상황이 발생할 수 있습니다.

해당 컨트롤이 반드시 가운데로 위치해야하지만 컨트롤 생성 순서가 꼬여있어 겹치는 현상이 발생됩니다.

 

분명 가운데 Button의 옵션을 Dock Fill로 변경하였으나 머리 속 구조처럼 가운데 딱 들어가는 형태가 아닌 위쪽과 오른쪽 컨트롤과 겹쳐져 보이는 현상이 발생합니다.

 

해결 방법은 간단합니다. 가운데 버튼을 클릭하고 Ctrl+x / Ctrl+v 하면 됩니다. 컨트롤을 잘라내고 다시 붙여넣음으로 우선순위를 바꿔주는 겁니다. 이 단순한 작업을 진행하면 바로 해결되는 걸 확인할 수 있습니다.

 

이를 응용하여 원하는 panel을 여러개 구성하고 Panel위에 Panel을 Docking 하며 화면 구성을 원활하게 진행할 수 있습니다.

 

[Panel Dock 작업 팁]

이렇게 panel위에 여러 컨트롤을 Docking하여 작업하다 보면 Panel 위치를 옮기거나 변경하고 싶을 때가 있습니다. 이럴 때마다 번거롭게 속성창에서 어떤 게 내가 움직이기 원하는 Panel인지 찾을 필요가 없습니다.

물론 Panel을 생성할 때 위처럼 기본 네이밍이 아닌 직접 이름을 부여하고 작업을 진행하면 찾기야 용이하겠지만 나중에 작업하다보면 한 개 화면에 컨트롤이 수백 개가 되는 경우도 있기 때문에 위와 같이 작업하면 작업 효율이 떨어지기 마련입니다.

 

이럴 때 원하는 Panel을 찾기 위해서는 Panel위에 있는 아무 컨트롤을 클릭하고 Esc버튼을 클릭하면 됩니다. 그럼 해당 컨트롤이 Docking되어있는 Panel이 선택됩니다.