2014-09-24 2 views
0

В настоящее время я работаю с формами и mdi. В моем проекте есть mainform (mdiContainer), который может иметь x subforms. Я хочу, чтобы каждый раз, подформация закрыта, все остальные подформы, где расположены снова.Изменение LayoutMdi из родительской формы при закрытии дочерней формы

Вы можете сделать это с помощью написания этого в MainForm:

public void resetToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical); 
} 

В подчиненной, я делаю это:

private void subform_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    try 
    { 
    Form1 mainform = new Form1(); 
    mainform.resetToolStripMenuItem_Click(mainform, EventArgs.Empty); 
    } 
    catch 
    { 
    System.Windows.Forms.MessageBox.Show("error"); 
    } 
} 

Это не дает какой-либо ошибки, но и привычка устраивать субформ еще раз. Я также попытался вызвать метод с другими параметрами.

Любая идея, как я могу сделать эту работу?

+0

Вы начинаете новую основную форму каждый раз, когда вы закрываете дочернюю форму. Попробуйте удалить эту строку. Родитель mdi не должен быть повторно инициализирован всякий раз, когда ребенок закрыт. – tinstaafl

ответ

1

Эта линия должна сделать паузу:

Form1 mainform = new Form1(); 

Вы сделали новую форму, так что вы не ссылками на существующем.

Но я думаю, что есть проблемы, которые пытаются сделать это из детской формы.

Это, вероятно, лучше, чтобы слушать закрытое мероприятие ребенка от MdiParent, как это:

ChildForm childForm = new ChildForm(); 
childForm.FormClosed += childForm_FormClosed; 
childForm.MdiParent = this; 
childForm.Show(); 

, а затем в Закрытом методе, вызовите код:

void childForm_FormClosed(object sender, FormClosedEventArgs e) { 
    this.BeginInvoke(new Action(() => { 
    resetToolStripMenuItem_Click(null, null); 
    })); 
} 

я использовал BeginInvoke, потому что в противном случае закрытая дочерняя форма по-прежнему включается в макетирование макета.

+0

Не могу сделать это, childForm.FormClosed + = childForm_FormClosed и this.BeginInvoke .. дает мне ошибку: doesnt существует в этом контексте ... – user3616874

+0

@ user3616874 Не могу понять, что вы сделали, но весь этот код находится в MDI родитель. – LarsTech

+0

oh ok. Я исправлю это в своем проекте. Но все равно это просто ничего не сделает. Он просто работает без ошибок. – user3616874