我目前正在开发一个C#Windows窗体应用程序.
用户通过loginForm登录后,它将被带到mainForm.
我想用一种方式编写代码,用户点击mainForm标题栏上的十字后,会有一个提示询问用户"这将关闭应用程序.确认?" 然后是是和否按钮.
如果是,将显示另一个框,"申请已关闭!"
如果不是,消息框将关闭,应用程序将继续运行.
我目前的代码是:
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
System.Windows.Forms.Application.Exit();
}
else
{
this.Activate();
}
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
首先,我不知道为什么消息框弹出两次以便整个事情关闭.
其次,如果我点击否,表格也会关闭,我无法将其恢复.
Ray*_*Ray 30
要取消关闭表单,请在您需要的else语句中e.Cancel = true;.在真实情况下,您不需要显式Exit.
试一试
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
}
else
{
e.Cancel = true;
this.Activate();
}
}
Run Code Online (Sandbox Code Playgroud)
我假设您的第二个MessageBox说它已关闭,仅用于测试目的.
你可能只想要.
private void mainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show("This will close down the whole application. Confirm?", "Close Application", MessageBoxButtons.YesNo) != DialogResult.Yes)
{
e.Cancel = true;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,该语句会检查它们是否未命中,而不是它们是否取消.这意味着如果他们点击对话框中的x,则不会将其视为确认.
编辑:如果mainForm不是主要形式
好的,我想我现在有了你要问的东西.
我要做的是将我在上面的第二个代码块中的代码放在FormClosing中,然后在FormClosed事件处理程序中有这个
private void mainForm_FormClosed(Object sender, FormClosedEventArgs e)
{
MessageBox.Show("The application has been closed successfully.", "Application Closed!", MessageBoxButtons.OK);
System.Windows.Forms.Application.Exit();
}
Run Code Online (Sandbox Code Playgroud)