728x90
메인 폼에서 자식 폼을 여는 방법은 두 가지가 있다.
1. Show(): 해당 폼이 닫히기 전이라도 다른 폼 사용 가능.
2. ShowDialog(): 해당 폼이 닫히기 전까지 다른 폼 사용 불가능.
ShowDialog의 경우는 상관이 없지만,
Show로 자식 폼을 열었을 때 다른 폼이 중복으로 뜨지 않게 하기 위해서는 설정을 해주어야 한다.
※ 단계별 학습을 원치 않는 분은 총 정리 코드로 이동하셔서 보시면 됩니다.
- 실습 진행
메인 폼: MainForm.cs
자식 폼: Form1.cs, Form2.cs, Form3.cs
1. bool 선언
bool activateFormExist = false;
- 열려있는 폼이 존재하는지 아닌지를 확인하기 위한 bool을 선언한다.
2. 메인 폼에 Button 삽입

- 클릭 시 원하는 자식 폼이 열리게 할 버튼을 메인 폼에 추가한다.
3. Button Click Event 생성
private void button1_Click(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
}
- 각 버튼마다 Click Event를 생성한다.
4. Form 인스턴스 생성
private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();
}
private void button2_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
}
private void button3_Click(object sender, EventArgs e)
{
Form3 form3 = new Form3();
}
- 각 Click Event마다 Show() 해줄 Form 인스턴스를 생성한다.
5. ActivateForm 메서드 선언
private void activateForm(Form activateForm)
{
if(activateFormExist == false)
{
activateFormExist = true;
activateForm.Show();
activateForm.TopMost = true; //해당 폼을 맨 위로
activateForm.FormClosing += formClosingEvent;
}
}
- activateFormExist(열려있는 폼이 존재하는지 아닌지를 확인하기 위한 bool 변수)가 false 일 때 자식 폼을 Show() 하도록 코드를 작성한다.
- Show() 했던 자식폼을 닫으면, formClosingEvent(사용자 선언) 이벤트가 실행된다.
- 특정 자식 폼이 실행중일 때 activateFormExist(열려있는 폼이 존재하는지 아닌지를 확인하기 위한 bool 변수)는 true이다.
6. FormClosing 이벤트 추가
private void formClosingEvent(object sender, EventArgs e)
{
activateFormExist = false;
}
- 실행중이던 폼을 닫으면 activateFormExist 변수를 다시 false로 바꿔주어야 한다.
7. Button Click Event에 메서드 추가
private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();
activateForm(form1);
}
private void button2_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
activateForm(form2);
}
private void button3_Click(object sender, EventArgs e)
{
Form3 form3 = new Form3();
activateForm(form3);
}
이와같이 진행하면, form1이 활성화 되어있을 때 form2와 form3 버튼을 눌러도 폼이 실행되지 않는다.
다시 말해, 하나의 자식폼이 실행중이라면 다른 자식폼들은 실행되지 않도록 막은 것이다.
- 총 정리 코드
bool activateFormExist = false;
private void button1_Click(object sender, EventArgs e)
{
Form1 form1 = new Form1();
activateForm(form1);
}
private void button2_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
activateForm(form2);
}
private void button3_Click(object sender, EventArgs e)
{
Form3 form3 = new Form3();
activateForm(form3);
}
private void activateForm(Form activateForm)
{
if(activateFormExist == false)
{
activateFormExist = true;
activateForm.Show();
activateForm.TopMost = true; //해당 폼을 맨 위로
activateForm.FormClosing += formClosingEvent;
}
}
private void formClosingEvent(object sender, EventArgs e)
{
activateFormExist = false;
}
지금까지 자식 폼 하나만 활성화하기 위한 실습을 진행해 보았습니다.
도움이 되셨길 바랍니다. 감사합니다.
→ 다음 실습 이어서 하기
https://it-amin.tistory.com/99
[C# 학습] 자식 폼 호출 시 부모 폼 기능 비활성화(Form 호출 시 다른 Form 사용 막기, Controls 활용)
※ 본 실습 진행 전, 아래 게시물을 확인하고 오시길 바랍니다. https://it-amin.tistory.com/98 [C# 학습] 자식 폼 하나만 활성화하기(Show() 폼 중복 실행 방지, FormClosing 활용) 메인 폼에서 자식 폼을 여는
it-amin.tistory.com
728x90
반응형
'개발 공부 > C# 학습' 카테고리의 다른 글
[C# 학습] DataTable 검색 기능(Select 이용) /DB 테이블 필드 이름 공백 (0) | 2022.12.13 |
---|---|
[C# 학습] 자식 폼 호출 시 부모 폼 기능 비활성화(Form 호출 시 다른 Form 사용 막기, Controls 활용) (0) | 2022.11.25 |
[C# 학습] C#으로 Excel Export, Excel 원하는 셀 위치에 이미지 삽입(worksheet.Paste) (0) | 2022.11.17 |
[C# 학습] 폼1 -> 폼2 데이터 전송(다른 폼에 데이터(클래스) 전송, 이벤트 이용) (0) | 2022.11.08 |
[C# 학습] OleDbConnection, OleDbCommand, OleDbDataAdapter, OleDbDataReader (0) | 2022.10.24 |