[C#] 윈폼 MDI 만들기
- C#/Windows Form
- 2019. 8. 18. 03:00
오늘은 윈폼에서 MDI를 구현해 보려고 합니다.
MID란 무엇인가?
- MDI란 Multiple Document Interface의 약자로써, 하나의 창에서 여러가지 작업들을 할 수 있는 인터페이스를 말합니다.
그렇다면 윈폼을 이용하여 MDI를 구현해 보겠습니다.
시나리오
1. MainForm에 MenuStrip 컨트롤을 배치
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(); } } }
|
실행 결과
이처럼 화면 전환이 제대로 되는 것을 확인하실 수 있습니다.
감사합니다ㅎㅎ
'C# > Windows Form' 카테고리의 다른 글
[C# 윈폼] TextBox에 입력된 문자 Button 클릭시 메시지 박스로 출력 (0) | 2019.08.25 |
---|---|
[C#] 윈폼 프로그래스바(Progress Bar) 사용하기 (6) | 2019.08.21 |
[C#] 윈폼(Windows Form) 버튼 컨트롤 Text 줄 바꿈 하는 방법 (0) | 2019.08.17 |
[윈폼] 윈폼 로그인 및 회원가입 UI 구성 및 기능 구현 (Oracle 연동) (13) | 2019.08.02 |
[C# 윈폼] 윈폼 Button(버튼) Click(클릭) 이벤트 및 이벤트 핸들러 선언 방법 (4) | 2019.07.29 |
이 글을 공유하기