I'm on your side, when times get rough.

2011-05-04

[C# Winform] VerticalTabConrtol

Filed under: Programming — Peter_KIM @ 09:05

Microsoft Chart Control Sample 프로그램을 분석하던 중, 나름대로 쓸만한 Tab 컨트롤을 발견했습니다.

한가지 좋지 않은 점은 디자인 모드에서 Tab 페이지를 추가하거나, 컨트롤의 크기 변경, 이동 등의 사용자의 직접적인 작업을 완벽하게 지원하지 못하는 점이 있습니다. 이런 면은 기본 WinForm Tab 컨트롤에 비하여, 불편할 수도 있습니다.

 

화면에 표시되는 모습은 아래와 같습니다.

clip_image0016.png

디자인 모드에서 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 모습이 표시됩니다.

clip_image002[6]

D.     코드를 빌드하고 실행하면, 아래와 같이 Tab 컨트롤의 모습은 보이지 않게 됩니다.

clip_image0034.png

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

2011-05-02

[Stream Insight] Application DEV.

Filed under: Programming — Peter_KIM @ 07:53

SI.jpg

n  Main Process

1.     Create Server Instance

2.     Create Application

3.     Create Input Stream Object

4.     Create Query Template Object

5.     Create & Register Input Adaptor

6.     Create & Register Output Adaptor

7.     Create Query Binder Object

8.     Bind a Query Template Input to Input Adaptor

9.     Add an Output Adaptor as Event Consumer

10.   Create Runnable Query

11.   Start Query

n  Input Adaptor

1.     Create Configuration Class

2.     Create Factory Class

3.     Create Stream Input Class

    • Implement Functions
      • public override void Start()
      • public override void Resume()
      • Implement Event Creation Function
    • Event Creation Function
      • Check the state of Adaptor
      • If the state is Stopping Stopped Adaptor return
      • Create event populate payload
      • Enqueue event with payload
      • Check the enqueue result
      • If result is Full Ready Adaptor return

 

n  Output Adaptor

1.     Create Configuration Class

2.     Create Factory Class

3.     Create Stream Output Class

    • Implement Functions
      • public override void Start()
      • public override void Resume()
      • Implement Event consume Function
    • Event consume Function
      • Check the state of Adaptor
      • If the state is Stopping Stopped Adaptor return
      • Dequeue the event
      • Check the dequeue result
      • If result is Empty Ready Adaptor return

Create a free website or blog at WordPress.com.