7

我正在使用 Microsoft Visual C# 2008 Express。

在我的主表单中,右上角有用于关闭表单的 X 按钮。如何向此按钮添加代码?在我的菜单中,我有一个“退出”项,它有清理和关闭我的数据库的代码。如果用户选择将其作为退出方式,我如何向此按钮添加相同的代码?

谢谢!

-阿迪娜

4

9 回答 9

12

使用 FormClosing 事件应该可以捕获任何关闭表单的方式。

于 2009-05-24T18:18:19.053 回答
8

在窗体的设计视图中,在属性窗口中,选择事件按钮并向下滚动到“FormClosed”和“FormClosing”事件。

FormClosed 在窗体关闭后调用。

FormClosing 在表单关闭之前调用,还允许您取消关闭,保持表单打开:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = true;
}
于 2009-05-24T18:22:17.470 回答
1

如果您想问用户“您确定要关闭此表单吗?”,然后使用FormClosing, 您可以在其中设置Cancel = True并且表单将保持打开状态。

如果您只想在表单确定关闭时关闭某些资源,那么您可以使用FormClosedevent.

如果您可以控制整个代码,那么这并不重要。FormClosing但是您不希望发生的事情是在事件的其他处理程序将保持表单打开时使用清理资源。

于 2009-05-24T19:01:52.457 回答
0

使用您的 winform 的 Closed-Event。

于 2009-05-24T18:16:23.297 回答
0

FormClosing/FormClosed 让您可以观察该表单的事件,该事件可能与应用程序退出一致。但是,您可以连接另一个名为 Application.ApplicationExit 的事件。

在您的 Main 方法中:

Application.ApplicationExit += Application_ApplicationExit;

...

private static void Application_ApplicationExit(object sender, EventArgs e) {

  // do stuff when the application is truly exiting, regardless of the reason

}
于 2009-05-24T18:26:39.570 回答
0

此代码将捕获用户单击“X”或在表单上使用 Alt-F4 以允许您执行某些操作。我必须使用它,因为我需要该操作来调用我的关闭事件,并且由于赛车事件而在使用 FormClosing 事件时它不会调用它。

/// <summary>
/// This code captures the 'Alt-F4' and the click to the 'X' on the ControlBox
/// and forces it to call MyClose() instead of Application.Exit() as it would have.
/// This fixes issues where the threads will stay alive after the application exits.
/// </summary>
public const int SC_CLOSE = 0xF060;
public const int WM_SYSCOMMAND = 0x0112;
protected override void WndProc(ref System.Windows.Forms.Message m)
{
    if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE)
        MyClose();

    base.WndProc(ref m);
}
于 2009-05-24T18:46:35.713 回答
0

双击 form'design 中的退出按钮,然后调用 Dispose() 方法

于 2013-03-02T16:42:31.103 回答
0

表单操作方法 //

 protected override void OnFormClosing(FormClosingEventArgs e)

          {
          base.OnFormClosing(e);

          if (e.CloseReason == CloseReason.WindowsShutDown) return;

               switch (MessageBox.Show(this, "Are you sure you want to exit?", "Exit", MessageBoxButtons.YesNo))
                     {
                       case DialogResult.No:
                           e.Cancel = true;
                           break;
                     default:
                          break;
                     }
         }
于 2013-03-04T05:02:12.143 回答
0
 You can use form closing events choose or set closing event in  properties window      
 You can add dialog conditions based on what task you want to perform before closing form

private void Form1_FormClosing(object sender,FormClosingEventArgs e)
{
Application.Exit();
//you can also use Application.ExitThread();
}
于 2016-04-01T07:31:48.753 回答