2014-09-24 4 views
0

현재 양식과 mdi로 작업하고 있습니다. 내 프로젝트에는 x 하위 폼을 가질 수있는 mainform (mdiContainer)이 있습니다. 나는 언제나, 하위 폼이 닫히고, 다른 모든 하위 폼이 다시 배열되는 것을 알기를 원합니다. 이하위 양식을 닫을 때 상위 양식에서 LayoutMdi로 변경하십시오.

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"); 
    } 
} 

가 늘 하위 폼을 준비

당신은 mainform에이 글을 쓰는에 있다고 할 수있다 다시. 다른 매개 변수를 사용하여 메서드를 호출하려고했습니다.

내가 어떻게이 작업을 할 수 있는지 알고 싶습니다.

+0

하위 양식을 닫을 때마다 새로운 mainform을 시작합니다. 해당 행을 삭제하십시오. 자식이 닫힐 때마다 mdi 부모를 다시 초기화 할 필요는 없습니다. – tinstaafl

답변

1

이 줄은 일시 정지해야한다 :

Form1 mainform = new Form1(); 

당신은 새로운 형태를 만들어, 그래서 당신은 기존의 것을 참조하지 않습니다.

하지만이 문제는 어린이 양식에서 처리하려고 시도하는 것으로 보입니다.

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); 
    })); 
} 

내가 사용을

그것은이처럼 MDIParent에서 아이의 폐쇄 이벤트를 수신하기 위해 아마 더 낫다 BeginInvoke 그렇지 않으면 닫힌 자식 폼이 여전히 레이아웃 타일링에 포함됩니다.

+0

Cant do, childForm.FormClosed + = childForm_FormClosed and this.BeginInvoke .. 내게 오류를 준다 :이 컨텍스트에 존재하지 않는다 ... – user3616874

+0

@ user3616874이 코드는 모두 MDI에있다. 부모의. – LarsTech

+0

오케이. 나는 그것을 내 프로젝트에서 바로 잡는다. 그러나 여전히, 그것은 단지 아무것도하지 않을 것입니다. 그냥 오류없이 실행됩니다. – user3616874