본문 바로가기

Winform

[Winform] TabControl에서 다른 Form 띄우기(2) 및 TabPage 추가

반응형

- Winform에서 TabControl은 TabPage가 기본적으로 2개밖에 없기 때문에 TabPage 추가Form을 5개 추가해서 띄워 보는 방법을 포스팅하겠습니다.

https://succeeed3256.tistory.com/171 

 

[Winform] TabControl에서 다른 Form 띄우기

1. Winform 초기 화면 2. TabControl 생성 - 화면 왼쪽에 도구 상자를 클릭하면 TabControl이 보입니다. 클릭해서 Form1에 생성시킵니다. - Form1 안에 TabControl이 생성됩니다. 2. 다른 Form 생성 - 화면 위에 프로

succeeed3256.tistory.com

- 이 글을 읽기 전에 위에 있는 글을 먼저 보고 하시면 이해가 더 빠르실 겁니다.

 

1. TabPage 이름 바꾸기

- TabControl의 tabPage1을 누르고 빨간색 박스 아무 곳에 클릭을 하면 오른쪽 속성이 뜹니다.

- 오른쪽 밑에 파란색 박스에 자신이 원하는 이름을 입력하시면 됩니다. 저는 Con1으로 하겠습니다.

 

- 이름이 Con1으로 변경되었습니다.

 

2. TabPage 추가

- 빨간색 박스 Con1이나 tabPage2를 누르고  파란색 박스 TabPages의 (컬렉션)을 클릭하고 ...을 눌러줍니다.

 

- TabPage 컬렉션 편집기

추가(A) 버튼 클릭

- tabPage3 생성 -> Text에서 이름을 바꿔주셔도 됩니다. 저는 Con3로 하겠습니다.

- TabPage(Con3)가 생성되었습니다.

- 이 방법으로 2개 더 추가하겠습니다.

- 결과

 

3. Form 5개 만들고, TabControl에 넣기

- 자세한 방법은 맨 위에 링크로 들어가 주시면 됩니다.

- 5개의 Form을 만들었습니다.

 

- 각 폼의 FormBorderStyle을 Sizable -> None으로 바꿉니다.

 

4. TabControl에 Form 넣기 구현

- Form1.cs 에 코드를 입력합니다.

- Con1_Load의 함수를 보시면 tabControl1.TabPages.Count의 값은 5입니다.

- TabPage를 5개를 만들었기 때문이죠.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices.ComTypes;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Test1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.Load += Con5_Load;
            this.Load += Con4_Load;
            this.Load += Con3_Load;
            this.Load += Con2_Load;
            this.Load += Con1_Load;
        }
        private void Con1_Load(object sender, EventArgs e)
        {
            Con1 con1 = new Con1();

// Form1 = Parent 최상위노드 = 0
// Con1,2,3,4,5 = Child 하위노드 = 1
// .TopLevel = true이면 1~5의 폼들이 최상위 노드로 되기 때문에 false
// 애초에 불가
            con1.TopLevel = false;

// [tabControl1.TabPages.Count] = 5
           // Con1 tabPage의 tabIndex가 0이기 때문에 5 - 5 = 0
            tabControl1.TabPages[tabControl1.TabPages.Count - 5].Controls.Add(con1);
            tabControl1.SelectedIndex = tabControl1.TabPages.Count - 5;
            con1.WindowState = System.Windows.Forms.FormWindowState.Maximized;
            con1.Show();
        }
 
        private void Con2_Load(object sender, EventArgs e)
        {
            Con2 con2 = new Con2();
            con2.TopLevel = false;

// Con2 tabPage의 tabIndex가 1이기 때문에 5 - 4 = 1
            tabControl1.TabPages[tabControl1.TabPages.Count - 4].Controls.Add(con2);
            tabControl1.SelectedIndex = tabControl1.TabPages.Count - 4;
            con2.WindowState = System.Windows.Forms.FormWindowState.Maximized;
            con2.Show();
        }
 
        private void Con3_Load(object sender, EventArgs e)
        {
            Con3 con3 = new Con3();
            con3.TopLevel = false;

// Con3 tabPage의 tabIndex가 2이기 때문에 5 - 3 = 2
            tabControl1.TabPages[tabControl1.TabPages.Count - 3].Controls.Add(con3);
            tabControl1.SelectedIndex = tabControl1.TabPages.Count - 3;
            con3.WindowState = System.Windows.Forms.FormWindowState.Maximized;
            con3.Show();
        }
 
        private void Con4_Load(object sender, EventArgs e)
        {
            Con4 con4 = new Con4();
            con4.TopLevel = false;

// Con4 tabPage의 tabIndex가 3이기 때문에 5 - 2 = 3
            tabControl1.TabPages[tabControl1.TabPages.Count - 2].Controls.Add(con4);
            tabControl1.SelectedIndex = tabControl1.TabPages.Count - 2;
            con4.WindowState = System.Windows.Forms.FormWindowState.Maximized;
            con4.Show();
        }
        private void Con5_Load(object sender, EventArgs e)
        {
            Con5 con5 = new Con5();
            con5.TopLevel = false;

// Con5 tabPage의 tabIndex가 4이기 때문에 5 - 1 = 4
            tabControl1.TabPages[tabControl1.TabPages.Count - 1].Controls.Add(con5);
            tabControl1.SelectedIndex = tabControl1.TabPages.Count - 1;
            con5.WindowState = System.Windows.Forms.FormWindowState.Maximized;
            con5.Show();
        }
    }
}
 
cs

 

- Form1.Designer.cs 에서 private void InitializeComponent() 함수를 열면,

 

- 각 tabPage마다 TabIndex가 있는 걸 보실 수 있습니다.

- tabPage에 Index의 알맞은 Form을 넣기 위해 -5, -4 -3, -2, -1(Form1.cs 참조)을 하는 걸 보실 수 있습니다.

 

- 5개 Form(Con1, 2, 3, 4, 5)에 버튼을 하나 추가합니다.

- 각 Con.cs에 코드를 작성합니다. 

- Con1.cs인데 

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 Test1
{
    public partial class Con1 : Form
    {
        public Con1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
//ex) Con2 -> "Con2!"
//ex) Con3 -> "Con3!" .....
            MessageBox.Show("Con1!");
        }
    }
}
 
 cs

 

5. Result

- 이상으로 포스팅 마치겠습니다. 감사합니다. 

- 어려운부분이나 지적할 부분 있으시면 댓글로 남겨주시면 감사하겠습니다.

반응형