既に設計された 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)
{
}
}