믿지 못 할 본인의 기억력을 위해서 포스팅 합니다.
보통 C#에서 새로운 윈도우 폼을 새창으로 출력할때
Form1 frm1 = new Form1();
frm.Show();
이런 형식으로 띄우게 됩니다.
그런데 새폼으로 띄울 창이 많아지거나 관리가 귀찮으면 자연스럽게 폼명을 데이터 베이스에
입력하고 상황에 맞게 윈도우 폼을 새창으로 열고 싶어집니다.
물론 if 문이나 case 문을 사용하면 되지만 폼들이 많아지면 완전히 노가다 작업이 되고 파싱이 귀찮아지죠~
이럴때를 대비해서 C#에서는 어셈블리의 개체에 접근할 수 있는 Reflection 이란걸 제공하고 있습니다.
사용법!!
======================================================================================
using System.Reflection;
using System.Windows.Forms;
namespace winFormName
{
public MDIParent1()
{
InitializeComponent();
}
private void button1_Click(object sender,EventArgs e)
{
string frmName = "Form1"; //폼명
newForm(frmName);
}
private void newForm(string formName)
{
string nameSpace = "winFormName"; //네임스페이스 명
Assembly cuasm = Assembly.GetExecutingAssembly();
//string Format 의 따옴표와 마침표 주의!!
Form frm = (Form)cuasm.CreateInstance(string.Format("{0}.{1}", nameSpace, formName));
frm.MdiParent = this;
frm.Show();
}
}
참조 URL 1 : http://msdn.microsoft.com/ko-kr/library/ms173183(v=VS.90).aspx
참조 URL 2 : http://mblog.devpia.com/link/?no=2041126
응용 참조 URL : http://blog.naver.com/fightinggood/80063163251
참고로 Reflaction 을 과도하게 사용하지 말라고 하네요~
관련 포스트 http://ikpil.com/1234 를 읽어보시고 상황에 맞게 사용하시면 되겠습니다!
P.S : 안되신다는 분이 계셔서 소스를 첨부합니다. 소스는 VS2010 프로젝트 파일입니다.
소스 => winFormName.zip
덧글
아니면 뭔가 빠졌는지....
혹시 몰라서 본문에 소스파일 첨부했습니다.
VS2010 파일 입니다.
소스를 다운로드 받아서 하는데요. 저는 vs2008를 사용합니다.
버전을 가린다면 안되는게 맞는것 같습니다.
여하튼 님 소스를 보고 열심히 연구해 보겠습니다.
다시한번 감사드립니다.
VS2008에서도 잘 되던겁니다.
스크랩 되어 있는 내용은 잘 봤습니다~~
한가지 여쭤보고 싶은게 있어서요ㅠㅠ
더 궁금한건 한 솔루션에서 프로젝트들이 여러개 있을수 있잖아요~
그럴때 다른 프로젝트에 있는 form들을 동적으로 생성하고 싶은데 혹시알고계시나요~~?