Microsoft Chart Control Sample 프로그램을 분석하던 중, 나름대로 쓸만한 Tab 컨트롤을 발견했습니다.
한가지 좋지 않은 점은 디자인 모드에서 Tab 페이지를 추가하거나, 컨트롤의 크기 변경, 이동 등의 사용자의 직접적인 작업을 완벽하게 지원하지 못하는 점이 있습니다. 이런 면은 기본 WinForm Tab 컨트롤에 비하여, 불편할 수도 있습니다.
화면에 표시되는 모습은 아래와 같습니다.
디자인 모드에서 Vertical 속성의 값을 “True”로 설정하면 왼쪽의 탭과 같이 표시되고, “False”로 설정하면 오른쪽과 같이 표시됩니다.
이 컨트롤을 도구 상자에 올려서 사용할 수 도 있겠지만, 여기에서는 그냥 소스 코드 그대로 프로젝트에 포함하여, 사용해 보겠습니다.
절차는 다음과 같습니다. (Visual Studio 2010 사용)
1. C# 기반의 Windows Forms Application 프로젝트를 생성합니다.
2. 도구 상자에서 Panel 또는 Button 컨트롤을 끌어서 Form 위에 올려 놓습니다. (어떤 컨트롤이라도 관계없습니다. 다만, 자동으로 생성되는 코드가 적은 컨트롤을 추천합니다. 저는 Label 컨트롤을 사용하겠습니다.)
3. 솔루션 탐색기에서 폼의 Form1.Designer.cs 파일을 선택하고, Open 메뉴를 클릭합니다.
4. 코드를 아래와 같이 수정합니다.
A. 올려진 컨트롤에 해당하는 클래스 멤버 변수를 찾아서 변수의 타입과 인스턴트 생성 코드를 수정합니다. (경우에 따라서, 자동으로 생성된 컨트롤의 기본 코드를 모두 제거해야만 하는 경우도 있습니다.)
#region Windows Form Designer generated code
private void InitializeComponent() { // this.label1 = new System.Windows.Forms.Label(); this.label1 = new VerticalTabControl(); this.SuspendLayout(); …… } #endregion
// private System.Windows.Forms.Label label1; private VerticalTabControl label1; |
B. 디자인 모드에서 적절히 컨트롤의 크기를 조정하고, 속성 창에서 TabPages 항목의 값을 선택하여, Tab 페이지를 추가합니다.
C. Form 디자인 창에 아래와 같은 모양으로 추가된 TabPage 모습이 표시됩니다.
D. 코드를 빌드하고 실행하면, 아래와 같이 Tab 컨트롤의 모습은 보이지 않게 됩니다.
E. 문제를 해결하기 위해서 InitializeComponent() 함수를 아래와 같이 수정합니다.
#region Windows Form Designer generated code
private void InitializeComponent() { …… // this.label1.Controls.Add(this.verticalTabPage1); // this.label1.Controls.Add(this.verticalTabPage2); this.label1.TabPages.Add(this.verticalTabPage1); this.label1.TabPages.Add(this.verticalTabPage2); …… } #endregion |
5. 위의 E 단계는 컨트롤의 폼이 디자인 모드에서 변경 될 때마다, 반복해야 합니다. 물론, 컨트롤 변수 선언과, 생성된 코드를 사용자 함수 영역으로 이동하면 문제는 해결될 수 있지만, 디자인 모드를 이용하기 어렵다는 단점이 생기겠네요.
전체 코드는 아래의 주소에서 얻을 수 있습니다.
https://skydrive.live.com/embedicon.aspx/.Public/VTForm.7z?cid=1bbcdfedee1c617e