当用户单击标题栏中的十字时,如何显示MessageBox提示

Tho*_*mas 19 c# winforms

我目前正在开发一个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)