检测关闭表单的所有方法的最佳方法是什么?

问题描述:

我有一个表格,我在我的代码中多次使用End关闭。我想做一个命令来保存设置,当我这样做时,这叫做VarsToIni(),它接受一些公共变量并将它们保存在一个INI文件中。我已经尝试将它放在主窗口的FormClosing(它始终保持打开状态),并且只有当您按下X按钮而不是从我的End语句关闭时才起作用。检测关闭表单的所有方法的最佳方法是什么?

+1

检测关闭窗体的所有方法的最佳方法是不调用End。只需关闭主窗体。另外,INI文件是传统技术,如有可能,请尝试使用“我的项目”选项卡中的设置。 – LarsTech 2013-02-19 17:34:25

+1

显而易见的答案是不要用'End'关闭表单。这就是'Form.Close'方法的用途。 – JosephHirn 2013-02-19 17:45:15

+0

@LarsTech我不喜欢My.Settings的东西,所以决定切换回INI。它使其他应用程序(如安装程序)更易于阅读。 – RX14 2013-02-19 17:48:53

添加一个新的子并更换电话到End致电您的新子:

Sub EndMe() 
    VarsToIni() 
    Application.Exit() 
End Sub 

编辑:

正如丹指出,End()是一个糟糕的方式关闭应用程序,Application.Exit()是首选。

+0

我正在使用这种方法。 – RX14 2013-02-20 10:45:59

+0

然后你仍然在用'Shutdown mode:When startup form closing'调用'End' ... IMO'End' djv 2013-02-21 16:54:32

+0

@DanVerdolino我同意并修改。 – bendataclear 2013-02-21 17:15:55

我感到相当你的问题,仍然困惑:
这将关闭所有形式

For each x as Form in My.Application.OpenForms 
'You can then put your VarsToIni() here 
x.Close() 
Next 

注:添加到您的进口

Imports System.Windows.Forms 
+0

**“我试过把它放在主窗口的FormClosing中”**你怎么看? (是的,但它没有将'End'注册为'FormClosing'。)我使用不同形式的'End'是否重要?当我从另一个窗体执行'End'时,它会关闭窗体,我正在尝试检测窗体,但不会触发'FormClosing'。 – RX14 2013-02-19 17:25:04

+0

这会工作,但我更喜欢@bendataclear的方法。 – RX14 2013-02-19 17:32:36

考虑使用Application.Exit()而不是End。这允许调用FormClosing而不管它是什么(你可以根据它如何关闭来处理它)。

Private Sub frmMain_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing 
    Select Case e.CloseReason 
     Case CloseReason.ApplicationExitCall 
      ' This is the result of Application.Exit() 
      e.Cancel = False 
     Case CloseReason.UserClosing 
      ' This is the result of clicking the red X 
      Select Case MessageBox.Show("Are you sure you wish to exit?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question) 
       Case DialogResult.Yes 
        e.Cancel = False 
       Case DialogResult.No 
        e.Cancel = True 
      End Select 
     Case Else 
      e.Cancel = False 
    End Select 
    If Not e.Cancel Then 
     VarsToIni() 
    End If 
End Sub