1

MDI メイン フォーム、子フォームを表示するメニュー項目 (と呼びましょうfrmEmployees) があり、このフォーム内にButton(btnNew...)、ここからダイアログとしてフォームを開くには ( frmNewEmployee); つまり、が閉まるfrmEmployeesまで到達できません。frmNewEmployee

// Main_Form_Load
Main_Form.IsMdiContainer = true;

メインフォームのメニュー項目から開くfrmEmployees

// MenuItem_Click
frmEmployees frmEmp = new frmEmployees();
frmEmp.MdiParent = this;
frmEmp.Show();

ボタンから別のフォームを開く

// newButton_Click
frmNewEmployee frmNE = new frmNewEmployee();
frmNE.MdiParent = this.MdiParent;
//frmNE.Show();      // OK, but allows return to frmEmployees
frmNE.ShowDialog();  // here comes the problem

frmEmployees開いている間にブロックする方法はありfrmNewEmployeeますか?

前もって感謝します!

4

2 に答える 2

4

frmNE.mdiParent を設定しないでください。インスタンスを frmEmployees の子にします。言い換えると、mdiParent プロパティを設定せずに frmNE.ShowDialog() を呼び出すと、ブロックされたフォームは frmEmployee になります。

于 2013-01-11T22:48:28.363 に答える
0
namespace ModalTest
{
    using System;
    using System.Windows.Forms;

    public partial class frmMain : Form
    {
        frmEmployees frmEmp = new frmEmployees();
        frmNewEmployee frmNE = new frmNewEmployee();

        public frmMain()
        {
            InitializeComponent();
            IsMdiContainer = true;
        }

        private void btnGo_Click(object sender, EventArgs e)
        {
            frmEmp.MdiParent = this;
            frmEmp.Show();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            frmNE.MdiParent = frmEmp.MdiParent;
            frmEmp.Hide();
            frmNE.Show();
        }
    }
}

基本的に私がしたことは、3 番目のフォームfrmNEを 2 番目のフォームの親に割り当て、 frmEMPfrmEmp.Hide() を使用してフォームをビューから非表示にすることです。上で述べたように、'.ShowDialog()' を使用すると、3 番目のフォームが強制的にモーダルになるため、実行を続行するにはフォームが満たされる必要があります。

于 2013-01-11T22:49:25.173 に答える