2014-04-30 2 views
1

저는 학교에서 시작 프로그래머입니다. 큰 프로젝트를해야하고 양식 폐쇄 중 하나, 특히 양식 "폐회 일정"에 문제가 있습니다. 내가 sluitenToolStripMenuItem_Click을 사용하고 때 C# 양식 마감 행사

private void sluitenToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (MessageBox.Show("Het programma wordt hiermee gesloten.\nBent u zeker dat u wilt sluiten en uitloggen?", 
      "Waarschuwing , u staat op het moment het programma te sluiten",MessageBoxButtons.YesNo, 
      MessageBoxIcon.Exclamation) == DialogResult.Yes) 
     { 
      Application.Exit(); 
     } 
    } 

    private void window_Closing(object sender, FormClosingEventArgs e) 
    { 
     if(MessageBox.Show("Bent u zeker dat u wilt uitloggen?","Waarschuwing , u staat op het moment uit te loggen", 
      MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes) 
     { 

      loginForm.Show(); 
     } 
     else 
     { 
      e.Cancel = true; 
     } 

지금 내 문제는 내가 그것이 WINDOW_CLOSING 이벤트를 트리거 내 응용 프로그램을 닫습니다 예 버튼을 누릅니다. 하지만 사용자가 내 도구 상자 항목을 클릭 할 때가 아니라 오른쪽 상단 모서리의 큰 빨간색 X를 클릭하면 window_Closing 이벤트가 발생합니다. 사전에 덕분에
사람이 좋은 것 좋은 GUI를 만들기에 어떤 조언을 가지고 또한 경우 ) (I 당신은 저장하는 변수를 유지할 수

+0

이 일의 표준적인 방법이있다. – Andrew

+0

Andrew, 도구 상자에서 내 닫기를 누를 경우 여전히 내 사용자가 무언가를 클릭하므로 내 사용자가 내 이벤트의 유혹을 유발할 수 있습니다. 뭔가 내가 사랑하는 것이라고 개인 무효 window_Closing (개체 발신자, RedcrossEvent) 그래서 난 그냥 뭔가를 내 양식을 닫으려고 때마다 빨간 X 이벤트를 변경할 수 있습니다 – vsp33ddyv

+0

당신이 당신의 FormClosing 이벤트에서 보낸 사람을 확인할 수 있습니다 – Andrew

답변

2

) 내 코드에서 네덜란드에 대한 유감 벨기에에서 왔어요 이벤트가 발생한 위치의 상태. 당신의 FormClosing 이벤트에

bool ClosedFromMenu = false; 
private void sluitenToolStripMenuItem_Click(object sender, EventArgs e) 
{ 
    if (MessageBox.Show("Het programma wordt hiermee gesloten.\nBent u zeker dat u wilt sluiten en uitloggen?", 
     "Waarschuwing , u staat op het moment het programma te sluiten",MessageBoxButtons.YesNo, 
     MessageBoxIcon.Exclamation) == DialogResult.Yes) 
    { 
     ClosedFromMenu = true; 
     Application.Exit(); 
    } 
} 

private void window_Closing(object sender, FormClosingEventArgs e) 
{ 
    if(!ClosedFromMenu) 
    { 
    if(MessageBox.Show("Bent u zeker dat u wilt uitloggen?","Waarschuwing , u staat op het moment uit te loggen", 
     MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation) == DialogResult.Yes) 
    { 

     loginForm.Show(); 
    } 
    else 
    { 
     e.Cancel = true; 
    } 
    } 
} 
+0

나는 생각하고 있었는데 하지만이 교수는 항상 if/else에 많이 사용하고 있다고 말하면서 왜 그렇게하지 않았는지를 말합니다. 그래서 위대한 것이 다른 방법이 있다면. 하지만 대답 주셔서 감사합니다! – vsp33ddyv

1

당신은 sender 또는 e.CloseReason 확인할 수 있습니다. FormClosing 이벤트 처리기에서 다음 코드 예를 들어

: 당신이 Alt+F4를 누르면 또는 [X] 버튼을 클릭 한 경우

if (e.CloseReason != CloseReason.UserClosing) 
{ 
    //...... 
} 

실행되지 않습니다. 당신이`[X]를 클릭`또는`Alt + F4` 누르면 한 의미`CloseReason.UserClosing` 당신의있는 EventArgs에 -

http://msdn.microsoft.com/en-us/library/system.windows.forms.closereason%28v=vs.110%29.aspx