Function/C#
C# Panel 컨트롤에 폼 상속시키기: 다중 화면 전환 구현하기
wawManager
2024. 10. 17. 12:32
728x90
C#에서 Panel 컨트롤에 폼을 상속시키는 기능은 주로 다중 화면 전환이나 MDI(Multiple Document Interface) 같은 애플리케이션을 구현할 때 사용됩니다. 이 기능을 통해 기존의 윈도우 폼(Form) 객체를 Panel 컨트롤 안에서 로드하고 컨트롤할 수 있습니다. 예를 들어, 메인 폼에 있는 Panel 안에서 여러 서브 폼을 전환하며 보여주고 싶을 때 유용합니다.
1. Panel에 폼 로드하기
보통은 Form 객체를 새로 생성한 후 Panel의 Controls 속성을 이용해 서브 폼을 추가합니다.
예제 코드
아래의 예제는 MainForm이라는 메인 폼이 있고, 이 폼 안의 Panel 컨트롤에 SubForm이라는 서브 폼을 로드하는 방식으로 구성됩니다.
using System;
using System.Windows.Forms;
public class MainForm : Form
{
private Panel panelContainer;
private Button btnLoadForm;
public MainForm()
{
// Panel 컨트롤 초기화
panelContainer = new Panel();
panelContainer.Dock = DockStyle.Fill;
this.Controls.Add(panelContainer);
// Button 컨트롤 초기화
btnLoadForm = new Button();
btnLoadForm.Text = "Load SubForm";
btnLoadForm.Dock = DockStyle.Top;
btnLoadForm.Click += new EventHandler(LoadSubForm);
this.Controls.Add(btnLoadForm);
}
private void LoadSubForm(object sender, EventArgs e)
{
// 기존의 컨트롤을 제거하여 새로운 폼을 로드할 준비를 합니다.
panelContainer.Controls.Clear();
// SubForm을 인스턴스화하고 설정합니다.
SubForm subForm = new SubForm();
subForm.TopLevel = false; // TopLevel 속성을 false로 설정하여 폼이 부모 폼에 종속되도록 합니다.
subForm.Dock = DockStyle.Fill;
// Panel 컨트롤에 서브 폼을 추가하고 보여줍니다.
panelContainer.Controls.Add(subForm);
subForm.Show();
}
/* Program.cs 에 포함되어있기에 사용하지 않아도 된다.
[STAThread]
public static void Main()
{
Application.EnableVisualStyles();
Application.Run(new MainForm());
}*/
}
public class SubForm : Form
{
public SubForm()
{
this.Text = "SubForm";
Label label = new Label();
label.Text = "This is a sub form inside a panel.";
label.Dock = DockStyle.Fill;
this.Controls.Add(label);
}
}
2. 코드 설명
- MainForm 클래스:
- MainForm 클래스는 메인 폼으로, Panel과 Button 컨트롤을 포함하고 있습니다.
- panelContainer는 폼을 로드할 Panel로 설정되며, btnLoadForm 버튼을 클릭하면 LoadSubForm 메서드를 호출합니다.
- LoadSubForm 메서드:
- 이 메서드는 Panel의 기존 컨트롤을 모두 지운 후 새로 생성된 SubForm 객체를 panelContainer에 추가합니다.
- TopLevel 속성을 false로 설정하여 SubForm이 독립적인 최상위 창이 아닌 자식 컨트롤로 설정되도록 합니다.
- SubForm 클래스:
- SubForm 클래스는 간단한 서브 폼으로, Panel에 표시될 내용입니다.
- 예시에서는 Label을 추가하여 서브 폼임을 나타냅니다.
3. 추가 팁
- 폼 전환 효과: 서브 폼을 로드할 때 Fade In, Slide 같은 전환 효과를 넣고 싶다면, 타이머나 애니메이션 효과를 사용할 수 있습니다.
- 폼 데이터 공유: 메인 폼과 서브 폼 간에 데이터 공유가 필요하다면, 서브 폼의 생성자에 파라미터를 추가하거나 공용(public) 속성을 통해 데이터를 전달할 수 있습니다.
4. 사용 시 유의사항
- 한 번에 하나의 서브 폼만 표시해야 한다면 Panel에 추가할 때 Controls.Clear()를 호출하여 기존 컨트롤을 정리하는 것이 좋습니다.
- 다수의 서브 폼이 동시에 필요한 경우, FlowLayoutPanel이나 TableLayoutPanel을 사용해 여러 폼을 담는 것도 가능합니다.
728x90