티스토리 뷰

일반적으로 부모폼에서 자식폼을 열고 부모폼을 닫으면 자식폼도 닫히게 된다.
누구나 윈폼으로 만들다 보면 직면하는 문제 이다.

 

예)

private void button1_Click(object sender, EventArgs e)

{

Form2 fr = new Form2();

    fr.Show();

this.Close();

}

이런 디자인으로 폼을 만들고 Form1 버튼에 클릭이벤트에 위와 같은

코드를 입력하고 실행을 하면 Form2가 생성되었다가 Form1이 닫히면서

다시 Form2도 닫힌다.

 

쉽게 말해 Form1에서 Form2의 메모리 생성을 했는데 Form1이 닫히면서

Form2의 메모리가 해체되서 같이 닫히는 것이다. 이런 문제를 해결을 해보자.

 

 

Program.cs 에 다음과 같이 정의 한다.

 

static class Program

{

/// <summary>

/// 해당 응용 프로그램의 주 진입점입니다.

/// </summary>

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

Form2 fr = new Form2();

Application.Run(fr);

}

}

Program.cs에 녹색 부분에 있는 부분만 추가 하고 위 에

From1의 버튼 이벤트에 아까와 같은 코드를 그대로 쓰면

private void button1_Click(object sender, EventArgs e)

{

Form2 fr = new Form2();

    fr.Show();

this.Close();

}

이대로 쓰면 Form1 만 닫히고 Form2 이 열리는 것을 볼 수 있다.

static void Main() 에 미리 생성해 놓음 으로써 미리 프로그램이 시작할 때

메모리를 할당을 하고 Application.Run(fr); 함으로써 쓰레드를 생성해 주는 것이다.

즉 Form1 에서 Form2 fr = new Form2(); 을 프로그램 상에서 사용하게 되면 미리 할당해놓은

Form2를 사용하게 되어 Form1이 닫혀도 Form2는 메모리를 유지하고 있기 때문에 닫히지 않는다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함