2011-05-16 5 views
2

현재 다중 문서 인터페이스 응용 프로그램을 작성하고 있지만 x 버튼을 통해 하위 폼을 닫으면 문제가 발생합니다. 양식이 닫히면 양식을 다시 표시하는 유일한 방법은 해당 양식의 새 인스턴스를 작성하는 것입니다. 이는 이전 양식에 포함 된 모든 데이터가 손실되었음을 의미합니다.C#을 사용하여 닫을 때 MDI 자식 폼을 숨기기

양식을 단순히 숨기려면 양식 닫기 이벤트를 설정하려고했지만 사용자가 주 상위 양식을 닫으면 응용 프로그램이 종료되지 않습니다.

이 방법이 있습니까? 기본 폼의 X 버튼을 한 번 자식 폼을 닫고 한 번에 두 번 클릭해야이 코드

private void ParameterForm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (e.CloseReason != CloseReason.FormOwnerClosing) 
    { 
     this.Hide(); 
     e.Cancel = true; 
    } 
} 

: 여기

내가 현재 내 자식 폼 '폼 닫는 이벤트를 사용하고있는 코드입니다 메인 양식을 닫습니다.

답변

7

양식은 사용자가 열고 닫을 수있는 으로되어 있습니다. 실제로 닫히면 개체 인스턴스가 파괴되어 해당 개체 인스턴스와 관련된 필드 나 속성에 저장된 모든 데이터가 손실됩니다.

따라서 양식 인스턴스를 영구적 인 장소로 사용하여 데이터를 저장하면 안됩니다. 해당 데이터를 디스크에 저장하거나 데이터베이스에 저장하거나 양식의 전체에 걸쳐 공유되는 클래스 인스턴스에 저장할 필요가 있습니다. 물론 코드를 통해 명시 적으로 그렇게 할 때까지는 파기되지 않습니다. 사용자 인터페이스가없고 사용자가 "닫을"수 없으므로).

그러나이 작업을하고 싶다면 그렇게 할 수도 있습니다. e.CloseReason 특성들이 직접 사용자 상호 작용의 결과로 폐쇄하고 있음을 나타냅니다 경우에만 폐쇄에서 자식 폼을 방지 FormClosing 이벤트 처리기의 코드를 변경해야

private void ParameterForm_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (e.CloseReason == CloseReason.UserClosing) 
    { 
     this.Hide(); 
     e.Cancel = true; 
    } 
} 

이유 귀하를 확인이 작동하지 않습니다 (e.CloseReason != CloseReason.FormOwnerClosing)는 MDI 응용 프로그램이 있기 때문입니다. MDI 부모가 닫을 때 사용되는 특별한 이유가 있습니다 : CloseReason.MdiFormClosing. 으로 볼 수는 있지만 위와 같은 방법으로하는 것이 더 간단합니다. 예를 들어 Windows가 종료 될 때 창을 닫지 않도록하고 싶지 않기 때문입니다.

+0

감사합니다. – isometrik

관련 문제