У меня есть форма, которую я закрываю с помощью End
несколько раз в моем коде. Я хочу сделать команду для сохранения настроек, когда я делаю это с именем VarsToIni()
, который принимает некоторые общедоступные переменные и сохраняет их в INI-файле. Я попытался поместить его в окно FormClosing главного окна (которое остается открытым во всех случаях), и это работает только тогда, когда вы закрываете нажатие кнопки X не из моего оператора End
.Каков наилучший способ обнаружения всех способов закрытия формы?
ответ
Добавить новый Sub и заменить вызовы до End
с обращением к вашему новому Суб:
Sub EndMe()
VarsToIni()
Application.Exit()
End Sub
Edit:
Как Дан указывает, End()
плохой способ, чтобы закрыть приложение, Application.Exit()
является предпочтительным.
Я использую этот метод. – RX14
Затем вы все еще вызываете 'End' ... IMO' End' <'Application.Exit()' с 'выключенным режимом: когда форма запуска закрывается'. До тех пор, пока вы заменяете «End» на что-то, сделайте его «Application.Exit()» и обработайте закрытие приложения более красноречиво и с большим количеством опций/элементов управления в событии «Закрытие» вашей основной формы. По крайней мере, другие, спотыкающиеся об этом вопросе, не должны принимать этот ответ, не задумываясь. – djv
@DanVerdolino Я согласен и внесли поправки. – bendataclear
Я совершенно запутаться ваш вопрос, тем не менее:
Это будет закрывать все ваши формы
For each x as Form in My.Application.OpenForms
'You can then put your VarsToIni() here
x.Close()
Next
Примечание: Добавить это ваш импорт
Imports System.Windows.Forms
** «Я попробовал поместить его в окно формы FormClosing» ** Как вы думаете? (Да, но я не зарегистрировал 'End' как' FormClosing'.) Имеет ли значение, что я использую 'End' из другой формы? Когда я делаю 'End' из другой формы, он закрывает форму, которую я пытаюсь обнаружить, но не запускает' FormClosing'. – RX14
Это будет работать, но я предпочитаю метод @bendataclear. – RX14
Рассмотрите возможность использования 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
Лучший способ обнаружить все способы закрытия формы - НЕ НАЧАТЬ 'End'. Просто закройте основную форму. Кроме того, файлы INI являются устаревшей технологией, попробуйте использовать настройки на вкладке «Мой проект», если это возможно. – LarsTech
Очевидным ответом является не закрытие формы с помощью «Конец». Это метод 'Form.Close'. – JosephHirn
@LarsTech Мне не понравилась функция My.Settings, поэтому я решил переключиться на INI. Это облегчает чтение других приложений (например, установщика). – RX14