[C# 강좌 - 40] WIndow Form - 2 SDI, MDI


Study/C#  2012. 10. 14. 09:00

안녕하세요. 개발자 명월입니다.


저번 포스팅에서는 Window.Form 을 어떻게 띄우냐를 확인하였습니다. 이번 포스팅에서는 Window.Form의 폼 종류에 대해서 살펴보겠습니다.

 

윈도우 시스템에서는 SDI와 MDI 폼 두종류가 있습니다.

최근에는 MDI 스타일의 폼 종류는 거의 보이지 않으나 예전에는  MDI 폼 스타일 프로그램이 참 많았습니다.예를 들면 포토샵이 그러했고 윈도우 보조프로그램들이 그런식의 폼을 많이 사용하였습니다. 그러다면 MDI 는 무엇이냐 하면 영어로는 Multiple Document Interface으로 폼 안에 다중 폼을 두는 것입니다.

 

예제 소스입니다.

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
 
namespace Blog20121013
{
    class Program : Form
    {
        static void Main(string[] args)
        {
            Program p = new Program();
            p.Show();
            Application.Run();
        }
        public Program()
        {
            this.IsMdiContainer = true;
            this.Load += new EventHandler(Program_Load);
        }

        void Program_Load(object sender, EventArgs e)
        {
            Form[] childForm = new Form[10];
            for (int i = 0; i < 10; i++)
            {
                childForm[i] = new Form();
                childForm[i].MdiParent = this;
                childForm[i].Show();
            }
        }
    }
}

 

 

창 안에 윈도우창이 생성됩니다.

SDI 는 우리가 사용하는 Single Document Interface 로서 독립적인 폼을 실행시켜서 사용하는 방식을 뜻합니다.

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace Blog20121013
{
    class Program : Form
    {
        static void Main(string[] args)
        {
            Program p = new Program();
            p.Show();
            Application.Run();
        }
        public Program()
        {
            //this.IsMdiContainer = true;
            this.Load += new EventHandler(Program_Load);
        }
        void Program_Load(object sender, EventArgs e)
        {
            Form[] childForm = new Form[10];
            for (int i = 0; i < 10; i++)
            {
                childForm[i] = new Form();
                //childForm[i].MdiParent = this;
                childForm[i].Show();
            }
        }
    }
}

 

 

SDI는 앞으로 쭉 자세히 알아볼 예정이지만 MDI는 요번 포스팅에 마무리를 하니 조금 더 알아보도록 하겠습니다.

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;

namespace Blog20121013
{
    class Program : Form
    {
        static void Main(string[] args)
        {
            Program p = new Program();
            p.Show();
            Application.Run();
        }
        private Button[] _button;
        private String[] _buttonText = { "수평", "수직", "계단식", "아이콘" };
        public Program()
        {
            this.IsMdiContainer = true;
            this.Load += new EventHandler(Program_Load);
            this.FormClosed += new FormClosedEventHandler(Program_FormClosed);

            _button = new Button[4];
            for (int i = 0; i < 4; i++)
            {
                _button[i] = new Button();
                _button[i].Location = new Point(10+(i*40), 10);
                _button[i].Size = new Size(40, 40);
                _button[i].Text = _buttonText[i];
                this.Controls.Add(_button[i]);
                _button[i].Click += new EventHandler(Button_Click);
            }
        }

        void Button_Click(object sender, EventArgs e)
        {
            if ((Button)sender == _button[0])
            {
                this.LayoutMdi(MdiLayout.TileHorizontal);
            }
            else if ((Button)sender == _button[1])
            {
                this.LayoutMdi(MdiLayout.TileVertical);
            }
            else if ((Button)sender == _button[2])
            {
                this.LayoutMdi(MdiLayout.Cascade);
            }
            else if ((Button)sender == _button[3])
            {
                this.LayoutMdi(MdiLayout.ArrangeIcons);
            }
        }

        void Program_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();
        }
        void Program_Load(object sender, EventArgs e)
        {
            Form[] childForm = new Form[10];
            for (int i = 0; i < 10; i++)
            {
                childForm[i] = new Form();
                childForm[i].MdiParent = this;
                childForm[i].Show();
            }
        }
    }
 }

 

 

위 예제는 이벤트를 많이 사용하여 이해하기 힘들 것이라 생각됩니다. 그러나 MDI는 그리 중요도가 높지도 않으니 그냥 아 이렇게 사용하는 방법이 있구나 하고 알아두고 넘어가는 편이 좋다고 생각됩니다.