컴퓨터/c#

C# MDI Form/ MDI Child Form 사용하기 (간단)

k1asd1 2021. 6. 11. 14:12
728x90
반응형

* MDI란?

https://ko.wikipedia.org/wiki/%EB%8B%A4%EC%A4%91_%EB%AC%B8%EC%84%9C_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4

 

다중 문서 인터페이스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 다중 문서 인터페이스 (MDI)는 여러 창을 하나의 부모 창에서 상주하는 그래픽 사용자 인터페이스이다. 이러한 시스템은 자식 창이 다른 창을 포함하여 복잡하

ko.wikipedia.org

 

 

* 참고 사이트

https://stackoverflow.com/questions/2356337/how-to-show-a-child-form-within-a-mdi-container-form-which-its-windowstate-maxi

 

How to show a child form within a mdi container form which its windowstate= maximized?

How can I show a child form within a mdi container form which its windowstate= maximized ? when I put these below lines of code when my child form is loading (by clicking on a menu Item of my Main...

stackoverflow.com

 

Menu Strip이나 Tab control 등 다양한 방식으로 MDI 구현이 가능하며 전 Menu Strip로 만들어보겠습니다.


* 참고 화면

참고 화면

- 위처럼 Menu strip으로 간단한 메뉴를 구성하고 MDI Form이라는 부모 폼 안에 MDI Child Form이라는 자식 폼이 실행됩니다.

- 자식 폼을 보여줄 때 최대화, 최소화, 기본 크기 등 화면 크기 지정이 가능합니다.


* 처음 프로젝트 생성 시 만들어지는 폼 그대로 사용하였으며 도구 상자에서 Menu Strip을 가져다 놓고 원하는 메뉴를 작성합니다.

 

* 부모 폼으로 사용할 폼을 선택하고 속성 창에서 'IsMdiContainer'의 값을 'True'로 변경합니다. 이렇게 하면 선택한 폼에서 자식 폼을 불러와 사용 가능합니다.

 

IsMdiContainer 값 변경


* 자식 폼을 부모 폼 안에서 표현하기 위해 매번 사용되는 코드를 메서드로 작성했습니다. 나중에 Menu Strip에서 작성한 메뉴 중 Click 이벤트에서 매번 사용하게 됩니다.

 

* 예제

private Form ShowActiveForm(Form form, Type type)

{
    if (form == null)
    {
        form = (Form)Activator.CreateInstance(type);
        form.MdiParent = this;
        form.WindowState = FormWindowState.Maximized;
        form.Show();
    }
    else
    {
        if (form.IsDisposed)
        {
            form = (Form)Activator.CreateInstance(type);
            form.MdiParent = this;
            form.WindowState = FormWindowState.Maximized;
            form.Show();
        }
        else
        {    
            form.Activate();
        }
    }
    return form;
}


 

* 이제 Menu Strip에서 작성한 메뉴를 선택하고 Click 이벤트를 만들어줍니다.

 

* 예제

private void Child1_Click(object sender, EventArgs e)
{

    //자식 폼 name : ChildForm1

    ChildForm1 chifrm1 = null;

 

    //자식 폼이 열려있으면
    if(this.ActiveMdiChild != null)
    {
        //열려있는 자식 폼이 해당 폼이 아니면 닫는다
        if (this.ActiveMdiChild != chifrm1)
        {
            this.ActiveMdiChild.Close();
        }

        chifrm1= ShowActiveForm(chifrm1, typeof(ChildForm1)) as ChildForm1;
    }
    else
    {
        chifrm1= ShowActiveForm(chifrm1, typeof(ChildForm1)) as ChildForm1;
    }
}

 

- 현재 선택된 자식 폼이 아니면 다른 하위 폼들은 전부 닫히도록 하였습니다.


위처럼 간단하게 구현 가능합니다.

 

이상입니다.

728x90
반응형