1

既に設計された mdichild フォームが多数あり、フォームを mdichild として表示したいと考えています。メイン フォームを mdi に設定すると、フォームの 1 つを mdichild として正しく表示できます。面倒なコードは次のとおりです。

    public partial class KeyboardSettingsForm : Form
    {
        private mainForm _mForm;

        public KeyboardSettingsForm()
        {
            InitializeComponent();
            _mForm = new mainForm(); //<---mdiparent
            this.MdiParent = _mForm; //<---Commenting out this line shows the form

            this.Shown += new System.EventHandler(this.KeyboardSettingsForm_Shown);

        }
    }

コメントアウトするthis.MdiParent = _mForm;と、フォームが表示されます (ただし、mdichild としては表示されません)。そのコードをそのままにしておくと、フォームは表示されません。そのフォームを mdichild として表示するにはどうすればよいですか?

作業コードの更新

public partial class mainForm : Form
{
    private NavigationForm _navForm;
    public mainForm()
    {
        InitializeComponent();


        this.Shown += new System.EventHandler(this.mainForm_Shown);

    }

    private void mainForm_Shown(object sender, EventArgs e)
    {
        _navForm = new NavigationForm(this);
        _navForm.MdiParent = this;
        _navForm.Show();
    }

    private void mainForm_Load(object sender, EventArgs e)
    {

    }

}

public partial class NavigationForm : Form
{

    private KeyboardSettingsForm _wKeyboard;

    public NavigationForm(Form frm)
    {
        InitializeComponent();

        _wKeyboard = new KeyboardSettingsForm(frm);


    }

    private void NavigationForm_Load(object sender, EventArgs e)
    {

    }

    private void keyboardPictureBox_Click(object sender, EventArgs e)
    {
        _wKeyboard.Show();

    }

}

public partial class KeyboardSettingsForm : Form
{
    private Form _mdiParent;

    public KeyboardSettingsForm(Form frm)
    {
        InitializeComponent();
        _mdiParent = frm;
        this.MdiParent = frm;

        this.Shown += new System.EventHandler(this.KeyboardSettingsForm_Shown);

    }

    private void KeyboardSettingsForm_Load(object sender, EventArgs e)
    {
        MessageBox.Show(_mdiParent.Name);
    }

    private void KeyboardSettingsForm_Shown(object sender, EventArgs e)
    {

    }
}
4

3 に答える 3

1

次のようにメイン フォームを明示的に表示する必要があります。

_mForm = new mainForm();
this.MdiParent = _mForm;

this.Shown += this.KeyboardSettingsForm_Shown;

_mForm.Show(); // show mdi-parent explicitly because only the application's start-up form shows automatically.
于 2013-09-03T14:36:19.643 に答える
1

の親は誰だと言っていKeyboardSettingsFormますが、親をどこに表示していますか?

_mForm = new mainForm(); //<---mdiparent not shown :(
this.MdiParent = _mForm;

これを試して

_mForm = new mainForm();
_mForm.Show();//show your parent first
this.MdiParent = _mForm;

しかし、上記のコードでさえあまり意味がありません。このようなことをするつもりでしたか?

public partial class KeyboardSettingsForm : Form
{
    private mainForm _mForm;

    public KeyboardSettingsForm(mainForm mForm)
    {
        InitializeComponent();
        this._mForm = mForm;//Did you mean this?
        this.MdiParent = _mForm;

        this.Shown += new System.EventHandler(this.KeyboardSettingsForm_Shown);

    }
}
于 2013-09-03T14:36:30.083 に答える
1

mFormmdi コンテナーを作成する必要があります。

mForm.IsMdiContainer = true;
于 2013-09-03T14:28:35.487 に答える