2014-02-07 3 views
2

mdfiform1이라는 두 가지 형식이 있습니다. form1 코드로 mdfi 양식을 MdiContainer으로 만들고 싶습니다. 다음을 시도했지만 실행할 때 프로그램이 닫힙니다.MdiContainer 형식이 열리지 않음

private void Form1_Deactivate(object sender, EventArgs e) 
{ 
    this.TopMost = false; 
    Mdfi newMDIChild = new Mdfi(); 
    newMDIChild.IsMdiContainer = true; 
    this.MdiParent = newMDIChild; 
    newMDIChild.Show(); 
} 
+1

왜 비활성화 이벤트 기간 동안 양식을 추가하려고()! – User999999

+0

사진 뷰어를 Google Picasa처럼 보이게 만들 때, 사용자가 화면에서 mdi 양식을 만들고 이미지가 그 곳에 들어가면 클릭합니다. –

+0

MDI 양식이 상위 양식 내에 있습니다. 그게 네가 원하는지 모르겠다. 이 코드가 호출되면 [form1]을 닫으려면 [X] 버튼을 누르십니까? –

답변

2

응용 프로그램의 기본 창을 하위 창으로 변경하면 많은 부작용이 있습니다. Winforms는 MdiParent 할당으로 인해 창을 강제로 종료합니다. Main() 메소드에서 Application.Run() 호출을 완료하는 것으로 충분하며 앱이 종료됩니다. 당신은 그 변경해야합니다 :

[STAThread] 
    static void Main() { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     var main = new Form1(); 
     main.Show(); 
     Application.Run(); 
    } 

을 그리고 당신은 당신이 지금 MDI 부모가 닫힐 때 종료 있는지 확인해야합니다 :

private void Form1_Deactivate(object sender, EventArgs e) { 
     this.TopMost = false; 
     var newMdiParent = new mdfi(); 
     newMdiParent.IsMdiContainer = true; 
     this.MdiParent = newMdiParent; 
     newMdiParent.FormClosed += (s, ea) => Application.Exit(); 
     newMdiParent.Show(); 
     this.Deactivate -= Form1_Deactivate; 
    } 

    private void Form1_FormClosed(object sender, FormClosedEventArgs e) { 
     if (this.MdiParent == null) Application.Exit(); 
    }