[C#] 윈폼 MDI 만들기



 

오늘은 윈폼에서 MDI를 구현해 보려고 합니다.

 

MID란 무엇인가?


-     MDIMultiple Document Interface의 약자로써, 하나의 창에서 여러가지 작업들을 할 수 있는 인터페이스를 말합니다.

 

그렇다면 윈폼을 이용하여 MDI를 구현해 보겠습니다.

 

시나리오


1.    MainFormMenuStrip 컨트롤을 배치

2.    Menu에는 폼1, 2, 종료 3가지 기능 추가

3.    1 메뉴 클릭 시, MainForm에 폼1 호출, 2 메뉴 클릭 시, MainForm에 폼2 호출 되게 끔 구현

 

위의 시나리오를 토대로 예제 코드를 작성해 보도록 하겠습니다.


1. 윈폼 프로젝트 생성




 

2. 도구상자에서 MenuStrip 컨트롤 배치



이처럼 MenuStrip 컨트롤을 배치 후, 파일이라는 큰 메뉴 이름을 설정 한 후, 아래에는 폼1, 2, 창 닫기 3개의 메뉴를 만들어 주세요.

 



추가로, MainForm 속성에서 IsMdiContainer 를 반드시 True로 설정해 주셔야 합니다!!!

 

3. Form1, Form2 자식 폼 생성하기





이처럼 ChildForm1, ChildForm2 를 생성해 주세요.

그리고 디자인은 아래와 같이 해주시기 바랍니다.

 

ChildForm1.cs



ChildForm1.cs에는 TabControl을 배치 시켜 주세요.

 

ChildForm2.cs




ChildForm3.cs에는 RadioButton, Button 컨트롤들을 배치 시켰습니다.

 

컨트롤은 사용자 분께서 원하시는 대로 배치 시켜 주시면 되겠습니다.

 

대신, MainForm, ChildForm1, ChildForm2 모두 폼 사이즈는 동일하게 해 주셔야 합니다.

 

그럼 이제 다시 MainForm.cs로 돌아 오셔서 이제 실제 MainForm에서 MenuStrip 메뉴를 클릭 했을 때, 각각의 알맞은 창들이 나오게 소스코드를 구현하겠습니다.


 

예제 코드


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

 

namespace MDI

{

    public partial class Form1 : Form

    {

        //자식  객체로 선언

        private ChildForm1 mChildForm1 = null

        private ChildForm2 mChildForm2 = null

        public Form1()

        {

            InitializeComponent();

 

            //MenuStrip Click 이벤트 선언

            this.1ToolStripMenuItem.Click += Form1ToolStripMenuClick;

            this.2ToolStripMenuItem.Click += Form2ToolStripMenuClick;

            this.창닫ToolStripMenuItem.Click += ExitToolStripMenuClick;

        }

 

        private Form ShowActiveForm(Form form, Type t)

        {

            if (form == null)

            {

                form = (Form)Activator.CreateInstance(t);

                form.MdiParent = this;

                form.WindowState = FormWindowState.Maximized;

                form.Show();

            }

            else

            {

                if (form.IsDisposed)

                {

                    form = (Form)Activator.CreateInstance(t);

                    form.MdiParent = this;

                    form.WindowState = FormWindowState.Maximized;

                    form.Show();

                }

                else

                {

                    form.Activate();

                }

            }

            return form;

        }

 

        public void Form1ToolStripMenuClick(object sender, EventArgs e)

        {

            if (ActiveMdiChild != null)  // 자식폼이 열려 있으면

            {

                   // 열려있는 자식폼이 Form1  아니면

                if (this.ActiveMdiChild != mChildForm1)  

                {

                    ActiveMdiChild.Close(); // 현재 활성화된 창을 닫아라

                }

                mChildForm1 = ShowActiveForm(mChildForm1, 

typeof(ChildForm1)) as ChildForm1;

            }

            else

            {

                mChildForm1 = ShowActiveForm(mChildForm1, 

typeof(ChildForm1)) as ChildForm1;

            }

        }

 

        public void Form2ToolStripMenuClick(object sender, EventArgs e)

        {

            if (ActiveMdiChild != null)  // 자식폼이 열려 있으면

            {

                  // 열려있는 자식폼이 Form1  아니면

                if (this.ActiveMdiChild != mChildForm2)  

                {

                    ActiveMdiChild.Close(); // 현재 활성화된 창을 닫아라

                }

                mChildForm2 = ShowActiveForm(mChildForm2, 

typeof(ChildForm2)) as ChildForm2;

            }

            else

            {

                mChildForm2 = ShowActiveForm(mChildForm2, 

typeof(ChildForm2)) as ChildForm2;

            }

        }

 

        public void ExitToolStripMenuClick(object sender, EventArgs e)

        {

            Application.Exit();

        }

    }

}

 

Colored by Color Scripter

 cs

 

실행 결과




이처럼 화면 전환이 제대로 되는 것을 확인하실 수 있습니다.


 

감사합니다ㅎㅎ


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY