메인폼의 메뉴에서 다른 서브폼을 열었을때, 가장 기본적인 코드로 폼을 열어보면 서브창만 움직일 수 있고

메인폼은 움직일 수가 없다.

using System;
using System.Windows.Forms;

namespace Namespace
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }

        private void menuButton_Click(object sender, EventArgs e)
        {
            //폼을 생성하고 보여줍니다.
            frmSub subForm = new frmSub();
            subForm.ShowDialog(); // 모달 다이얼로그로 표시합니다.
        }
    }

    public partial class frmSub : Form
    {
        public frmSub()
        {
            InitializeComponent();
        }
    }
}

 

아래의 코드는 메뉴의 버튼을 눌렀을때, 서브폼이 팝업되고 메인폼도 제어가 가능한 코드이다.

그리고 sub폼이 열린 상태에서 메뉴의 버튼을 다시 한번 누르면 에러가 발생한다.

이것을 방지하기 위해서는 subForm이 실행되엇는지 체크하면 된다.

using System;
using System.Windows.Forms;

namespace Namespace
{
    public partial class MainForm : Form
    {
        private frmSub subForm; // frmSub 폼의 인스턴스를 보관할 멤버 변수 선언

        public MainForm()
        {
            InitializeComponent();
        }

        private void menuButton_Click(object sender, EventArgs e)
        {
            if (subForm == null || subForm.IsDisposed)
            {
                // frmSub 폼이 없거나 이미 닫혔다면 새로 생성.
                subForm = new frmSub();
                subForm.FormClosed += (s, args) => subForm = null; // 폼이 닫힐 때 참조를 제거.
            }

            if (!subForm.Visible)
            {
                subForm.Show(this); // MainForm의 소유자로 frmSub 폼을 표시.
            }
        }
    }

    public partial class frmSub : Form
    {
        public frmSub()
        {
            InitializeComponent();
        }
    }
}

'C#' 카테고리의 다른 글

[C#] 문자열을 숫자로 변환  (0) 2024.05.23
[C#] 파일 다운로드기능  (0) 2024.01.05
[C#] 버튼 일괄 숨기기 / 보이기  (0) 2023.11.23
Posted by 샌츠
,