2011-08-22 5 views
0

나는 3 개의 폼을 가지고 있습니다.다른 양식의 MDI 자식 폼

  • main_frm는
  • app_frm 내가 "취소"라는 이름의 버튼이이 progress_frm을 닫 한 아이 MDI progress_frm 형태로 app_frm

의 진행 상황을 보여줍니다

  • progress_frm 단지 한 형태이다 MDI이다 형태. 그런 다음 progress_frm을 닫을 때 다음 이벤트가 발생합니다.

    private void frm_progress_Closing(object sender, FormClosingEventHandler e) 
        { 
    
         Form currentForm = Form.ActiveForm; 
    
         Form app_frm_temp = currentForm.ActiveMdiChild; 
    
         app_frm_temp.Dispose(); 
    
        } 
    

    나는 app_frm이 닫히고 그 일을 종결 짓기를 기대하고 있습니다. 하지만 그건 일어나지 않습니다 .. 단지 progress_frm 폼이 닫히고 app_frm이 hour glass로 실행되고 여전히 프로세스/스레드를 실행하는 것을 볼 수 있습니다.

    내 목표는 사용자가 app_frm이 시작한 프로세스를 중단하고 닫으려는 경우 progress_frm에서 app_frm을 종료하고 닫을 수 있다는 것입니다.

    다음 의견을 보았습니다. 다른 양식에서 복사하여 붙여 넣기 때문에 closing 이벤트가 발생하지 않았습니다. 그런 다음 progress_frm의 디자인 부분에 가서 혼란스러운 이벤트를 작성했습니다. (:

     private void progress_frm_FormClosing(object sender, FormClosingEventArgs e) 
        { 
         Form currentForm = Form.ActiveForm; 
    
    
    
         foreach (Form frm in currentForm.MdiParent.MdiChildren) 
         { 
          if (frm.GetType() == currentForm.GetType()) 
          { 
           frm.Focus(); 
           return; 
          } 
         } 
        } 
    

    내가 루프가 currentForm는 .. 기억에 액세스 할 때 널 예외 "개체 참조가 개체의 인스턴스로 설정되지 않습니다"얻을 내 내가 MDI 설정의 일부가 아닌 progress_frm입니다 ... 참조 및 닫으려면/부모 자식 main_frm 자식 폼 app_frm 끝내려고 ... currentForm main_frm,하지만 그것을 참조 할 수 있도록 자식 폼을 찾을 수 없습니다 이유를 알고 ?? ?? "currentForm.MdiChildren"여전히 가지고 같은 널 참조 예외 ...

    은 내가 MDI 개념을 이해 생각했지만, 지금

  • +0

    : 당신이 양식의 인스턴스를 해결하기 위해 다스 려하고 있는지 확인하기 위해,이 모든을 통해 루프 MDI 차일을 열고 관심있는 일에 대한 참조를 얻을 수있는 방법이다 Mdi 부모가 그렇다면 Form.ActiveForm을 사용할 필요가 없다고 생각합니다. foreach 루프 대신 this.MdiParent.MdiChildren을 사용하십시오 ... 또한 'frm.Focus()'를 'frm.Close()'로 바꾸는 형식을 닫으려면 – Waqas

    답변

    0

    가 확실하여 app_frm_temp을하는 것이 있습니까 적절하게 참조 할 수있는 방법에 혼란스러워지고 있어요 개체는 app_frm의 열린 인스턴스를 나타냅니다. 폼? How to stop BackgroundWorker on Form's Closing event?

    그러나이 전 : 그것은 당신이 제대로 프로세스/스레드에 닫는 알림을 보낼 수있는 당신의 app_frm의 FormClosing 이벤트 다음의 경우는, 좋은 예는 폼을 닫기 전에 백그라운드 스레드/프로세스를 중지 여기 주어진다 frm_progress 및 app_frm 모두 동일의 하위 경우

    foreach (Form frm in this.MdiParent.MdiChildren) 
        { 
          if (frm.GetType() == app_frm.GetType()) 
          { 
           frm.Focus(); 
           return; 
          } 
        } 
    
    +0

    thx, 내 질문을 업데이트했습니다 ... 시도했습니다. 당신이 제안하고 아직도 어디에도 가지 않고있는 것. .. 나는 closing 이벤트에서 frm_progress로서 progress_frm을 참조했다. – thanosazlin

    관련 문제