детская форма не отображается

У меня уже есть несколько детских форм, и я хотел бы показать их как детские. Я установил основную форму на mdi, и я могу правильно показать одну из форм как 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; форма будет отображаться (но не как ребенок). Если оставить этот код нетронутым, форма не будет отображаться. Как мне сделать так, чтобы эта форма отображалась как ребенок?

Обновленный рабочий код

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)
    {

    }
}

person dottedquad    schedule 03.09.2013    source источник
comment
Я отредактировал ваше название. См. Должны ли вопросы включать «теги» в свои заголовки?, где нет единого мнения, не следует.   -  person John Saunders    schedule 03.09.2013


Ответы (3)


вам нужно сделать mForm контейнер mdi:

mForm.IsMdiContainer = true;
person No Idea For Name    schedule 03.09.2013
comment
Я сделал MessageBox.show(_mForm.IsMdiContainer.ToString());, чтобы проверить, является ли _mForm фактическим mdicontainer, а вывод MessageBox - истинным. Однако я проверил _mForm.IsMdiContainer = true;, но форма все еще не отображалась. - person dottedquad; 03.09.2013
comment
@ даже после _mForm.Show ()? - person No Idea For Name; 03.09.2013
comment
_mForm.Show() открывает другой mdiparent с отображаемой KeyboardSettingsForm, но только во вновь показанном mdiparent mForm. - person dottedquad; 03.09.2013
comment
@dottedquad, тогда мне нужна дополнительная информация, пожалуйста, расскажите, почему ребенок создает родителя, а не наоборот, что такое MainForm и какое окно запускается первым - person No Idea For Name; 03.09.2013
comment
Мне удалось заставить мой код работать. Я отредактировал свой исходный пост, добавив обновленные фрагменты кода, которые работают должным образом. - person dottedquad; 03.09.2013
comment
@dottedquad теперь имеет смысл :) - person No Idea For Name; 03.09.2013

Вам нужно явно показать основную форму следующим образом:

_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.
person DmitryG    schedule 03.09.2013

Вы говорите, кто является родителем 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);

    }
}
person Sriram Sakthivel    schedule 03.09.2013