나는 3 개의 폼을 가지고 있습니다.다른 양식의 MDI 자식 폼
- main_frm는
- app_frm 내가 "취소"라는 이름의 버튼이이 progress_frm을 닫 한 아이 MDI progress_frm 형태로 app_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 개념을 이해 생각했지만, 지금
: 당신이 양식의 인스턴스를 해결하기 위해 다스 려하고 있는지 확인하기 위해,이 모든을 통해 루프 MDI 차일을 열고 관심있는 일에 대한 참조를 얻을 수있는 방법이다 Mdi 부모가 그렇다면 Form.ActiveForm을 사용할 필요가 없다고 생각합니다. foreach 루프 대신 this.MdiParent.MdiChildren을 사용하십시오 ... 또한 'frm.Focus()'를 'frm.Close()'로 바꾸는 형식을 닫으려면 – Waqas