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. 코드 설명

  1. MainForm 클래스:
    • MainForm 클래스는 메인 폼으로, Panel과 Button 컨트롤을 포함하고 있습니다.
    • panelContainer는 폼을 로드할 Panel로 설정되며, btnLoadForm 버튼을 클릭하면 LoadSubForm 메서드를 호출합니다.
  2. LoadSubForm 메서드:
    • 이 메서드는 Panel의 기존 컨트롤을 모두 지운 후 새로 생성된 SubForm 객체를 panelContainer에 추가합니다.
    • TopLevel 속성을 false로 설정하여 SubForm이 독립적인 최상위 창이 아닌 자식 컨트롤로 설정되도록 합니다.
  3. SubForm 클래스:
    • SubForm 클래스는 간단한 서브 폼으로, Panel에 표시될 내용입니다.
    • 예시에서는 Label을 추가하여 서브 폼임을 나타냅니다.

3. 추가 팁

  • 폼 전환 효과: 서브 폼을 로드할 때 Fade In, Slide 같은 전환 효과를 넣고 싶다면, 타이머나 애니메이션 효과를 사용할 수 있습니다.
  • 폼 데이터 공유: 메인 폼과 서브 폼 간에 데이터 공유가 필요하다면, 서브 폼의 생성자에 파라미터를 추가하거나 공용(public) 속성을 통해 데이터를 전달할 수 있습니다.

4. 사용 시 유의사항

  • 한 번에 하나의 서브 폼만 표시해야 한다면 Panel에 추가할 때 Controls.Clear()를 호출하여 기존 컨트롤을 정리하는 것이 좋습니다.
  • 다수의 서브 폼이 동시에 필요한 경우, FlowLayoutPanel이나 TableLayoutPanel을 사용해 여러 폼을 담는 것도 가능합니다.

 

프로그램 실행 결과물

 

728x90