지식인에서 C# 관련 질문들을 보다보면 간단한 질문임에도 불구하고 답을 달기 어려운 질문들(변경해야 하는 파일이 많거나 코드가 긴 것 등)이나 주로 하는 질문들이 꽤 많이 보입니다.


그 중에서도 많이 보는 질문들은 "폼1에서 폼2를 열고, 폼2의 값을 유지시키고 싶어요" 등 두 개 이상의 폼을 활용하는 것에 대한 질문이 꽤 많이 보입니다.


그래서 간단하게 폼을 관리하는 클래스를 하나 만들었습니다.


FormTable.cs on GitHub (소스코드)



사용 방법은 정말 간단합니다.

프로젝트의 Program.cs를 아래처럼 변경합니다.


FormTable Example (C#)
[STAThread]
static void Main() {
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    // 사용할 폼을 등록합니다.
    // 기본적으로 Lazy initialization 을 수행합니다.
    // 등록과 동시에 폼 개체를 생성하시고 싶은 경우
    // 매개변수로 false 를 전달하시면 됩니다.
    FormTable.Register<Form1>();
    FormTable.Register<Form2>();

    // 폼의 이름이 FormExample 인 경우엔
    // FormTable.Register<FormExample>();
    // 이렇게 호출하시면 됩니다.

    // Application.Run(new Form1());
    // 이 아닌 FormTable.Get 을 사용합니다.
    Application.Run(FormTable.Get<Form1>());
}


이후 Form1에서 Form2의 제목을 변경해야 하거나 다이얼로그를 띄워야 하는 상황에선 아래처럼 간단하게 수행할 수 있습니다.


Form1에서 Form2의 제목을 바꾸는 방법FormTable.Get<Form2>().Text = "Form1에서 Form2의 제목 바꾸기"; 


Form1에서 Form2를 다이얼로그로 띄우는 방법FormTable.Get<Form2>().ShowDialog();




기존 방법이였다면 

Form2 form2 = new Form2();

form2.ShowDialog();


이런 식으로 코드를 작성해야 해서 효율적이지 않고, 개체가 계속 새로 생성되어 값이 유지되지 않는 문제가 있었는데, FormTable 클래스를 사용하면 이러한 문제들은 가볍게 해결하실 수 있습니다. (다만, 아직 스레드에 안전하지는 않습니다)

+ Recent posts