2012-10-11 4 views
0

나는, 내가 F1이 배치 될 수 있도록 하나의 내 응용 프로그램에서 Form2를 객체하지만 부모의 변경을 할 Form1에 또한부모를 처분 할 때 하위 양식 처분을 피하는 방법은 무엇입니까?

F2=new Form2(); 
F2.Dock = DockStyle.Fill; 
F2.TopLevel = false; 
F2.Parent = F1;//setting the parent of form1 to be form1 

를 만든 후이 형식 2를 만드는 코드입니다, 견인이 Form1에와 Form2를 형성해야하고 F2 부모를 Form1 형식의 다른 개체로 설정하십시오. F1을 처분 할 때 F2가 처분 될 때 F1 처분을 피하는 방법이 있습니까? 자식으로부터 onparentdispose 이벤트를 가져오고 부모를 변경하면 떨어져 있습니까? enter image description here

는 편집 :

는 난 단지 녹색 각각 빨간색 형태에 따라 양식하지만 블루 형태 변경의 레이아웃과 따라서는

+0

아마도 F1 Close 이벤트에 연결해보십시오. – Jeff

+2

"시작 양식이 닫힐 때 응용 프로그램 종료"문제 일 수 있습니다. –

+0

F1이 주 양식 인 경우 앱이 종료됩니다. 그렇지 않으면 부모로 F1을 설정하지 마십시오. –

답변

1

당신은 FormClosing 이벤트에서 F1의 하위 양식을 얻을 다른 양식에 자신의 부모를 설정할 수 있습니다

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    foreach (Form frm in this.Controls.OfType<Form>()) 
    { 
     frm.Parent = Application.OpenForms.OfType<Form1>().First(f => f.Tag == "Foo"); 
    } 
} 

변경 .First(f => f.Tag == "Foo")를 F1의 다른 인스턴스를 찾는 원하는 방식!

1

당신이 가리 키도록 전역 정적 변수를 사용할 수 있습니다 배치 취득을 원하는 Form2의 인스턴스

public class Globals 
{ 
    public static Form2 form2; 
} 

어딘가에 당신이 Form2의 객체를 생성 Globals.Form2의 variabe에 할당 예를 들면 다음과 같습니다.

F2=new Form2(); 
F2.Dock = DockStyle.Fill; 
F2.TopLevel = false; 
F2.Parent = F1;//setting the parent of form1 to be form1 
Globals.form2 = F2; // Save it to an global variable 

그런 다음를 Form1의 FormClosing 이벤트 처리기에서, 또 다른 형태의 객체 (예를 들어, 기본 양식) 또는 null로 Gloabls.Form2.Parent 속성을 설정합니다. 이렇게하면 Form1이 삭제 될 때 Form2 개체가 활성 상태를 유지합니다.

관련 문제