2012-07-13 4 views
3

이 질문은 중복되는 것처럼 보일 수 있지만 프로그램을 테스트하는 동안이 문제에 휩쓸 렸습니다. 문제 해결 방법에 대해 혼란스러워합니다.Closing 및 WinForm FormClosing 이벤트 처분 방지하는 방법?

winform이 있고 양식을 닫는 이벤트가 있습니다. 이 경우, 나는 "창을 닫으시겠습니까?"라고 묻는 메시지 상자가 열립니다. 그들이 예 버튼을 누르면 응용 프로그램이 창을 닫고 예상대로 처리되지 않도록합니다. 그래서 다시 열 수 있습니다. 그러나 버튼을 누르지 않으면 여전히 창을 닫지 만 창은 사라집니다. 그래서 다시 열려고 할 때 "처리 된 객체에 액세스 할 수 없습니다."라는 예외가 발생했습니다. No 버튼을 누르면, Winform을 열어 놓고 처리하지 않기를 바란다. 여기

내 코드입니다 :

method PPMain.PPMain_FormClosing(sender: System.Object; e: System.Windows.Forms.FormClosingEventArgs); 
begin 
     if MessageBox.Show('Are you sure you want to close the window?','PPMain',MessageBoxButtons.YesNo) = DialogResult.Yes then 
     begin 
      e.Cancel := true; 
      Hide; 
     end 
     else 
      e.Cancel := false; 
end; 
난 당신이 그 반대 (e.Cancel을하고, 숨길 창을 닫고 그것을 말할 e.Cancel = true를 설정해야하기 때문에 생각

= 거짓과 숨어 있지 않음) winform이 닫히고 처리되지 않도록합니다.

어떻게 해결할 수 있습니까? 사전에

감사,

+1

@mrazza. 나는 당신이 가까운 = 숨기기로 고집하는 경우에 당신은 몇몇 문제점으로 더 다룰 것이라는 점을 말할 것입니다. 나는 이런 종류의 일을 피하려고 노력한다. –

답변

10

e.Cancel = true는 폐쇄에서 창을 방지 -가 close 이벤트를 중지합니다.

e.Cancel = false은 "닫기 이벤트"가 계속되어 (창을 닫고 처리됨으로 인해 다른 이벤트가 중지된다고 가정 함) 허용합니다.

당신이 이렇게 할 것 같다

method PPMain.PPMain_FormClosing(sender: System.Object; e: System.Windows.Forms.FormClosingEventArgs); 
begin 
     e.Cancel := true; 
     if MessageBox.Show('Are you sure you want to close the window?','PPMain',MessageBoxButtons.YesNo) = DialogResult.Yes then 
     begin 
      Hide; 
     end 
end 

e.Cancel := true;은 닫을 수 창을 방지 할 수 있습니다. 그런 다음 사용자가 예 [Hide;]이 창을 숨 깁니다 (처리하지 않고)라고 말하면 프롬프트됩니다. 사용자가 아니요를 클릭하면 아무 일도 일어나지 않습니다.

어떤 종류의 닫기 작업이 수행되고 있는지 감지하는 것이 좋습니다. e.CloseReason을 사용하여 OS 종료 또는 해당 라인을 따라 진행하는 동안 닫히지 않도록하십시오. 이처럼

: 바로 이것이라고

method PPMain.PPMain_FormClosing(sender: System.Object; e: System.Windows.Forms.FormClosingEventArgs); 
begin 
     if e.CloseReason = System.Windows.Forms.CloseReason.UserClosing then 
     begin 
      e.Cancel := true; 
      if MessageBox.Show('Are you sure you want to close the window?','PPMain',MessageBoxButtons.YesNo) = DialogResult.Yes then 
      begin 
       Hide; 
      end 
     end 
end 
+0

대단히 감사합니다. – ThN