방법: MDI 자식 양식 만들기

MDI 자식 양식은 사용자 상호 작용의 중심이므로 MDI(다중 문서 인터페이스) 애플리케이션의 중요한 요소입니다.

다음 절차에서는 Visual Studio를 사용하여 대부분의 워드 프로세서 애플리케이션과 유사한 RichTextBox 컨트롤을 표시하는 MDI 자식 양식을 만듭니다. System.Windows.Forms 컨트롤을 DataGridView 컨트롤 또는 컨트롤의 혼합과 같은 다른 컨트롤로 대체하여 다양한 가능성을 가진 MDI 자식 창(및 확장을 통해 MDI 애플리케이션)을 만들 수 있습니다.

MDI 자식 양식 만들기

  1. Visual Studio에서 새 Windows Forms 애플리케이션 프로젝트를 만듭니다. 양식에 대한 속성 창에서 해당 IsMdiContainer 속성을 true로 설정하고 WindowsState 속성을 Maximized로 설정합니다.

    그러면 폼이 자식 창의 MDI 컨테이너로 지정됩니다.

  2. Toolbox에서 MenuStrip 컨트롤을 폼으로 끌어서 놓습니다. 해당 Text 속성을 File로 설정합니다.

  3. 항목 속성 옆에 있는 줄임표(...)를 클릭한 다음, 추가를 클릭하여 자식 도구 스트립 메뉴 항목 두 개를 추가합니다. 이러한 항목에 대한 Text 속성을 NewWindow로 설정합니다.

  4. 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가>새 항목을 선택합니다.

  5. 새 항목 추가 대화 상자에서 Windows Form(Visual Basic 또는 Visual C#) 또는 템플릿 창에서 Windows Forms 애플리케이션(.NET)(Visual C++)을 선택합니다. 이름 상자에서 양식의 이름을 Form2로 지정합니다. 열기를 선택하여 프로젝트에 양식을 추가합니다.

    참고

    이 단계에서 만든 MDI 자식 폼은 표준 Windows Form입니다. 따라서 폼의 투명도를 제어할 수 있는 Opacity 속성이 있습니다. 그러나 Opacity 속성은 최상위 창에 사용하도록 설계되었습니다. 그리기 문제가 발생할 수 있으므로 MDI 자식 폼에는 사용하지 마세요.

    이 폼은 MDI 자식 폼에 대한 템플릿이 됩니다.

    Windows Forms 디자이너가 열리고 Form2를 표시합니다.

  6. 도구 상자에서 RichTextBox 컨트롤을 양식으로 끌어서 놓습니다.

  7. 속성 창에서 Anchor 속성을 Top, Left로 설정하고 Dock 속성을 Fill로 설정합니다.

    이렇게 하면 폼의 크기를 조정하는 경우에도 RichTextBox 컨트롤이 MDI 자식 폼의 영역을 완전히 채웁니다.

  8. 새로 만들기 메뉴 항목을 두 번 클릭하여 해당 Click 이벤트 처리기를 만듭니다.

  9. 다음과 비슷한 코드를 삽입하여 사용자가 새로 만들기 메뉴 항목을 클릭할 때 새 MDI 자식 양식을 만듭니다.

    참고

    다음 예제에서는 이벤트 처리기가 MenuItem2에 대한 Click 이벤트를 처리합니다. 애플리케이션 아키텍처의 고유 정보에 따라 새로 만들기 메뉴 항목이 MenuItem2가 아닐 수도 있습니다.

    Protected Sub MDIChildNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
       Dim NewMDIChild As New Form2()
       'Set the Parent Form of the Child window.
       NewMDIChild.MdiParent = Me
       'Display the new form.
       NewMDIChild.Show()
    End Sub
    
    protected void MDIChildNew_Click(object sender, System.EventArgs e){
       Form2 newMDIChild = new Form2();
       // Set the Parent Form of the Child window.
       newMDIChild.MdiParent = this;
       // Display the new form.
       newMDIChild.Show();
    }
    
    private:
       void menuItem2_Click(System::Object ^ sender,
          System::EventArgs ^ e)
       {
          Form2^ newMDIChild = gcnew Form2();
          // Set the Parent Form of the Child window.
          newMDIChild->MdiParent = this;
          // Display the new form.
          newMDIChild->Show();
       }
    

    C++에서 Form1.h의 맨 위에 다음 #include 지시문을 추가합니다.

    #include "Form2.h"
    
  10. 속성 창의 맨 위에 있는 드롭다운 목록에서 파일 메뉴 스트립에 해당하는 메뉴 스트립을 선택하고 MdiWindowListItem 속성을 Window ToolStripMenuItem으로 설정합니다.

    이렇게 하면 Window 메뉴가 활성 자식 창 옆에 확인 표시가 있는 열린 MDI 자식 창의 목록을 유지 관리할 수 있습니다.

  11. F5 키를 눌러 애플리케이션을 실행합니다. 파일 메뉴에서 새로 만들기를 선택하면 Window 메뉴 항목에서 추적되는 새 MDI 자식 양식을 만들 수 있습니다.

    참고

    MDI 자식 폼이 MainMenu 구성 요소(일반적으로 메뉴 항목의 메뉴 구조 사용)를 포함하고 MainMenu 구성 요소(일반적으로 메뉴 항목의 메뉴 구조 사용)가 있는 MDI 부모 폼 내에서 열린 경우 MergeType 속성(및 필요에 따라 MergeOrder 속성)을 설정했으면 메뉴 항목이 자동으로 병합됩니다. 두 MainMenu 구성 요소와 자식 폼의 모든 메뉴 항목에 대한 MergeType 속성을 MergeItems로 설정합니다. 또한 두 메뉴의 메뉴 항목이 원하는 순서대로 표시되도록 MergeOrder 속성을 설정합니다. MDI 부모 폼을 닫을 경우 MDI 부모에 대한 Closing 이벤트가 발생하기 전에 각 MDI 자식 폼에서 Closing 이벤트가 발생합니다. MDI 자식의 Closing 이벤트를 취소해도 MDI 부모의 Closing 이벤트가 발생하지 않도록 방지되지는 않습니다. 그러나 MDI 부모의 Closing 이벤트에 대한 CancelEventArgs 인수가 이제 true로 설정됩니다. CancelEventArgs 인수를 false로 설정하여 MDI 부모 및 모든 MDI 자식 폼을 강제로 닫을 수 있습니다.

참고 항목