0

我有VS2015 Windows窗体,每当我点击X关闭应用程序,它都会提示我关闭它。当我按“否”时,弹出窗口将关闭。但是,当我按是时,它会弹出另一个窗口,并要求我关闭它。VS2015关闭Windows窗体无法正常工作

我该如何解决这个问题?我想先关闭我的表单。

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
     { 
      const string closemsg = "Do you really want to close the program?"; 
      const string exit = "Exit"; 

      DialogResult dialog = MessageBox.Show(closemsg, exit, MessageBoxButtons.YesNo); 

      if (dialog == DialogResult.Yes) 
      { 
       Application.Exit(); 
      } 
      else if (dialog == DialogResult.No) 
      { 
       e.Cancel = true; 
      } 
     } 
+0

你确定需要'Application.Exit();'?如果你什么都不做,并返回离开'e.Cancel'为假? –

回答

2

这是非常简单的。 Make remove Application.Exit();

Application.Exit()生成FormClosing事件。

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    const string closemsg = "Do you really want to close the program?"; 
    const string exit = "Exit"; 

    DialogResult dialog = MessageBox.Show(closemsg, exit, MessageBoxButtons.YesNo); 

    if (dialog == DialogResult.Yes) 
    { 
     //Remove Application.Exit(); 
     //Application.Exit(); 
    } 
    else if (dialog == DialogResult.No) 
    { 
     e.Cancel = true; 
    } 
} 
+0

谢谢!这一个也工作@ –

+0

Doh!我忘了:P这里有+1 – MickyD

+0

@罗伊谢谢! – Hojin

1

然而,当我按是,它会弹出另一个同一个窗口,并要求我关闭与否。

原因是因为您的Form1_FormClosing将被再次调用。尝试设置一个_isExiting标志,您可以在输入时进行测试。

试试这个:

bool _isExiting; 

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (_isExiting) 
    { 
     // whoops, been here already, time to go! 
     return; 
    } 

    const string closemsg = "Do you really want to close the program?"; 
    const string exit = "Exit"; 

    DialogResult dialog = MessageBox.Show(closemsg, exit, MessageBoxButtons.YesNo); 

    if (dialog == DialogResult.Yes) 
    { 
     _isExiting=true; // set flag here so we don't repeat this exercise again 
     Application.Exit(); 
    } 
    else if (dialog == DialogResult.No) 
    { 
     e.Cancel = true; 
    } 
} 
+0

谢谢!它运作良好! –

+0

谢谢你,先生。 – MickyD