https://mainia.tistory.com/1607
|
[C#] MDI 폼에서 자식폼이 열어 있을 때 앞으로 보내기 |
|
환경 : Visual Studio 2012 |
MDI 폼에서 여러 폼을 열어서 풀 스크린으로 보다보면 기존에 열어 놨던 폼 개체를 계속 생성하는 경우가 있습니다. 기존에 열려져 있다면 제일 앞으로 당겨서 보여주면 되겠죠.
▶ 아래 그림처럼 두개의 창을 서로 번갈아 가며 제일 앞으로 당겨서 화면에 보여주는 것입니다.
▶ 먼저 해당하는 폼의 개체가 생성되어서 떠 있는지 검사해야 합니다. Application.OpenForms 는 떠 있는 모든 폼개체를 가져옵니다. Foreach 를 사용해 찾고자 하는 폼이 맞는지 체크합니다.
// 모든 폼을 찾는다
foreach (Form form in Application.OpenForms)
{
// 해당하는 타입이 맞는지 검사
if (form.GetType() == typeof(FrmOrderList))
{
}
}
▶ 이렇게 foreach 를 사용해 typeof 로 동일한 폼을 찾았다면 해당하는 폼을 앞으로 보내야 합니다. Activate() 사용해 활성화 시킨후 BringToFront() 이용해 제일 앞으로 당깁니다.
// 모든 폼을 찾는다
foreach (Form form in Application.OpenForms)
{
// 열려 있는 폼이 있을때
if (form.GetType() == typeof(FrmStoreList))
{
form.Activate();
form.BringToFront();
//form.WindowState = FormWindowState.Maximized;
return;
}
}
▶ 위의 소스로 체크해서 떠 있는 폼이 없다면 새로 만들어야 겠죠. 새로 폼 개체를 생성하고 MdiParent 속성을 이용해 MDI 폼에 붙입니다.
// 새로 폼 생성 FrmStoreList f = new FrmStoreList(); f.MdiParent = this; f.Text = "거래점 보기"; f.Show();
▶ 위 소스를 구현한 전체 함수 입니다.
// 자식폼에 상점리스트 추가하기
private void SubFormAddStoreList()
{
// 모든 폼을 찾는다
foreach (Form form in Application.OpenForms)
{
// 열려 있는 폼이 있을때
if (form.GetType() == typeof(FrmStoreList))
{
form.Activate();
form.BringToFront();
//form.WindowState = FormWindowState.Maximized;
return;
}
}
// 폼새로 생성 .
FrmStoreList f = new FrmStoreList();
f.MdiParent = this;
f.Text = "거래점 보기";
f.Show();
}
WinForm에서도 사용가능
if (Thr_Form_Rpl == null || !(Thr_Form_Rpl.IsAlive))
{
Thr_Form_Rpl = new Thread(() => { Application.Run(new Form_Replay_DGV()); }); // 멀티 스레드로 폼 실행 설정
Thr_Form_Rpl.SetApartmentState(ApartmentState.MTA); // 다중 스레드 아파트 설정
Thr_Form_Rpl.Start(); // 스레드 실행 (폼 실행)
}
else
{
foreach(Form form in Application.OpenForms)
{
if(form.GetType() == typeof(Form_Replay_DGV))
{
this.Invoke(new Action(delegate ()
{
form.Activate();
form.BringToFront();
}));
}
}
}
댓글 0
| 번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
|---|---|---|---|---|
| 16 | [노트].net core 윈도우에서 코딩후, 리눅스계열에서 실행하기! | proin | 2020.11.13 | 1 |
| 15 | C# - OpenCV를 이용한 IP Camera View 프로그래밍 | proin | 2020.08.20 | 1 |
| 14 | How to display a progressbar in taskbar in C# | proin | 2020.07.28 | 1 |
| 13 | [C#] IPC (Inter-Process Communication) | proin | 2020.07.24 | 1 |
| » | [C#] MDI 폼에서 자식폼이 열어 있을 때 앞으로 보내기 | proin | 2020.04.21 | 1 |
| 11 | How to programmatically create firebird database? | proin | 2020.03.30 | 1 |
| 10 | C# SqLite 사용하기 - 3편 | proin | 2020.03.12 | 1 |
| 9 | C# SQLite 사용하기 - 2편 | proin | 2020.03.12 | 1 |
| 8 | C# SQLite 사용하기 - 1편 | proin | 2020.03.12 | 1 |
| 7 | C#으로 SQLite 다루기 | proin | 2020.03.12 | 1 |
| 6 | C# 셀레니움으로 구글 로그인 하기 | proin | 2020.03.12 | 1 |
| 5 | C#으로 크롤링 하기 - 다음사이트 자동로그인 기능 | proin | 2020.03.12 | 1 |
| 4 |
.NET Framework: 488. TCP 소켓 연결의 해제를 알 수 있는 방법
| proin | 2020.03.10 | 1 |
| 3 | C#을 이용하여 간단한 1:N 비동기 채팅 프로그램을 만들어보자! - 서버편 | proin | 2020.03.06 | 1 |
| 2 |
C#을 이용하여 간단한 1:1 비동기 채팅 프로그램을 만들어보자 - 클라이언트편
| proin | 2020.03.05 | 1 |
| 1 | C#을 이용하여 간단한 1:1 비동기 채팅 프로그램을 만들어보자 - 서버편 | proin | 2020.03.05 | 1 |