2013-02-19 1 views
1

У меня есть форма, которую я закрываю с помощью End несколько раз в моем коде. Я хочу сделать команду для сохранения настроек, когда я делаю это с именем VarsToIni(), который принимает некоторые общедоступные переменные и сохраняет их в INI-файле. Я попытался поместить его в окно FormClosing главного окна (которое остается открытым во всех случаях), и это работает только тогда, когда вы закрываете нажатие кнопки X не из моего оператора End.Каков наилучший способ обнаружения всех способов закрытия формы?

+1

Лучший способ обнаружить все способы закрытия формы - НЕ НАЧАТЬ 'End'. Просто закройте основную форму. Кроме того, файлы INI являются устаревшей технологией, попробуйте использовать настройки на вкладке «Мой проект», если это возможно. – LarsTech

+1

Очевидным ответом является не закрытие формы с помощью «Конец». Это метод 'Form.Close'. – JosephHirn

+0

@LarsTech Мне не понравилась функция My.Settings, поэтому я решил переключиться на INI. Это облегчает чтение других приложений (например, установщика). – RX14

ответ

2

Добавить новый Sub и заменить вызовы до End с обращением к вашему новому Суб:

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

Edit:

Как Дан указывает, End() плохой способ, чтобы закрыть приложение, Application.Exit() является предпочтительным.

+0

Я использую этот метод. – RX14

+0

Затем вы все еще вызываете 'End' ... IMO' End' <'Application.Exit()' с 'выключенным режимом: когда форма запуска закрывается'. До тех пор, пока вы заменяете «End» на что-то, сделайте его «Application.Exit()» и обработайте закрытие приложения более красноречиво и с большим количеством опций/элементов управления в событии «Закрытие» вашей основной формы. По крайней мере, другие, спотыкающиеся об этом вопросе, не должны принимать этот ответ, не задумываясь. – djv

+0

@DanVerdolino Я согласен и внесли поправки. – bendataclear

0

Я совершенно запутаться ваш вопрос, тем не менее:
Это будет закрывать все ваши формы

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

+0

Это будет работать, но я предпочитаю метод @bendataclear. – RX14

1

Рассмотрите возможность использования 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