자바의 리플렉션(Reflection)과 똑같이 C#에서도 프로그램이 실행되면서 선언되었거나, 실행에 필요한 모든 객체에 대하여 어셈블리를 통해 정보를 확인, 인스턴스 생성, 형식 변경 등 필요한 작업을 할 수 있습니다.
사용자에 의해 이벤트 발생시 사용자가 선택한 이름으로 된 폼을 임포트 하는 예제를 만들어 보겠습니다.
⧫ 기능 정의
1. 마스터 폼에 여러가지 폼 이름이 적힌 버튼을 사용자가 클릭할수있다.
2. 버튼 클릭시 해당 이름으로 된 폼을 마스터 폼에 실행한다.
3. 다른 버튼을 클릭하면 2번 과정을 되풀이 한다.
⧫ 구현
1. 마스터 폼 디자인
- 크게 두개의 판넬로 반반씩 위치 시켰으며, 왼쪽 판넬에는 사용자가 폼을 선택할 수 있는 버튼을 두었으며, 오른쪽 판넬에는 선택된 폼이 실행될 공간으로 두었습니다.
2. 서브 폼 디자인
- 마스터 폼에 있는 버튼명과 똑같은 서브폼 두개를 만들었습니다. 두 폼은 각각의 폼 이름을 라벨로 중앙에 보여주도록 하였습니다.
3. 마스터 폼 소스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
public partial class Form1 : Form
{
string strFormName = "";
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
strFormName = "test003.kanadel";
setForm(strFormName);
}
private void button2_Click(object sender, EventArgs e)
{
strFormName = "test003.subForm2";
setForm(strFormName);
}
private void button3_Click(object sender, EventArgs e)
{
this.panel3.Controls.Clear();
}
private void setForm(string strFormName)
{
var varPageType = Type.GetType(strFormName);
var varFormInstance = Activator.CreateInstance(varPageType) as UserControl;
this.panel3.Controls.Clear();
this.panel3.Controls.Add(varFormInstance);
varFormInstance.Dock = DockStyle.Fill;
}
}
|
- 각 버튼 클릭 이벤트 부분과 폼 인스턴스 생성하는 매서드 두 부분으로 되어 있습니다.
3# : 폼 이름 변수 선언입니다.
12#, 18# : 각 버튼을 클릭시 폼 이름을 갱신합니다.
13#, 19# : 폼 이름 변수 갱신 후, 인스턴스 생성 매서드를 호출합니다.
29# ~ 30# : 폼 이름을 통해 타입을 확인한 후 UserControl 형으로 인스턴스를 선언합니다.
32# ~ 34# : 선언된 인스턴스를 위치 시킵니다.
@ 폼 이름은 "네임스페이스.폼이름" 형식으로 해야 어셈블리에서 찾을수 있습니다.
4. 서브 폼 소스는 없습니다.
5. 실행
C# 리블렉션 라이브러리에 대한 상세한 정보는 여기를 찾아보시면 됩니다.
(https://msdn.microsoft.com/ko-kr/library/system.reflection.assembly(v=vs.110).aspx)
오타나 잘못된 내용, 질문등은 언제나 환영 입니다. ^^
IT 기술 관련 다른 포스트 보러가기
작성자가 댓글을 삭제했습니다.
답글삭제