메뉴 건너뛰기

XEDITION

C#

https://mainia.tistory.com/1607


 

[C#] MDI 폼에서 자식폼이 열어 있을 때 앞으로 보내기

 

 

 

환경 : Visual Studio 2012

 

 

MDI 폼에서 여러 폼을 열어서 풀 스크린으로 보다보면 기존에 열어 놨던 폼 개체를 계속 생성하는 경우가 있습니다기존에 열려져 있다면 제일 앞으로 당겨서 보여주면 되겠죠.

 

 아래 그림처럼 두개의 창을 서로 번갈아 가며 제일 앞으로 당겨서 화면에 보여주는 것입니다.

 

[C#] 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();

                        }));

                    }

                }

            }

 


 

 

위로