Куда мне контролировать поведение кнопки закрытия «X» в верхнем правом праве WinForm?
-
27-09-2019 - |
Вопрос
Я рискую сделать мою приложение VB.NET немного лучше использовать, сделав некоторые из форм без угрейных.
Я думаю, что я понял, как использовать dlg.show () и dlg.hide () вместо звонка dlg.showdialog (). У меня есть экземпляр моего бесходного диалога в моей основной форме заявления:
Public theModelessDialog As New dlgModeless
Выстрелить безмоторное диалог, я звоню
theModelessDialog.Show()
и в рамках кнопок ОК и отменить в dlgModeless
у меня есть
Private Sub OK_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.OK
Me.Hide()
End Sub
Private Sub Cancel_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cancel_Button.Click
Me.DialogResult = System.Windows.Forms.DialogResult.Cancel
Me.Hide()
End Sub
И это, кажется, работает нормально.
Кнопка «X» в верхнем правом правом направлении. Когда я закрываю форму с этой кнопкой, постарайся открыть форму, я получаю
ObjectDisposedException был необработанным. Не может получить доступ к распоряженному объекту.
Я чувствую, что я больше всего там, но я не могу понять, как сделать одно из следующих действий:
- Скрыть эту кнопку «X»
- Поймать мероприятие, поэтому я не утилизирую объект (просто относится к этому, как будто я ударил отмена)
Есть идеи?
Класс этого диалога System.Windows.Forms.Form
.
Решение
Использовать Me.Close()
скрыть форму. Чтобы открыть его, используйте следующий фрагмент:
If theModelessDialog.IsDisposed Then
theModelessDialog = New dlgModeless
End If
dlgModeless.Show()
Если это сохранение данных, то вам нужно будет понять какой-то способ хранения его (возможно, в статической переменной / с в форме). Это правильный способ сделать то, что вы пытаетесь достичь, хотя.
Вам также придется простить меня, если мой VB выключен, это было какое-то время.
Другие советы
Поймите событие FormClizing и, если причина в зависимости от userClosing, установите отменить на событие true.
Что-то вроде следующее:
Private Sub Form1_FormClosing(sender as Object, e as FormClosingEventArgs) _
Handles Form1.FormClosing
if e.CloseReason = CloseReason.UserClosing then
e.Cancel = true
Me.Hide()
end if
End Sub
Формирование события позволяет мне сделать управляемый выход из формы, поэтому я включил вопрос, чтобы подтвердить выйти. У меня также есть флаг формы, чтобы заставить отменить, где я хочу, чтобы это не задать вопрос. Спасибо, ваше предложение помогло мне :)
Dim msgboxresponse As MsgBoxResult
If e.CloseReason = CloseReason.UserClosing Then
If Not Me.bTerminate Then
msgboxresponse = MsgBox("Are you sure you want to cancel adding?", _
MsgBoxStyle.Question + MsgBoxStyle.YesNo, Me.Text)
If msgboxresponse <> MsgBoxResult.Yes Then
e.Cancel = True
Return
End If
End If
End If
@Джон Скрыл форму в своем коде, и приведенные выше ответы обеспечивают решение этого случая. Однако часто вы не планируете использовать форму снова, так что вы действительно делать хочу, чтобы форма была расположена. Все близкие связанные действия будут в одном месте, если вы обрабатываете мероприятие FormClizing, используя Me.FormClosing
Добавляя его в Anycancel / Close / Exit Code, который у вас уже есть. Например, в случае @ Иоанна:
Private Sub Cancel_Button_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Cancel_Button.Click, Me.FormClosing
....More code
Me.Dispose
End Sub
Обратите внимание на использование Me.Dispose
вместо любого существующего Me.Close
. Отказ Если вы оставите Me.Close
Вы создадите бесконечный цикл. Видеть Это для тонких различий между близкими и утилизирующими.
Согласитесь с обработкой формирования события. Или изменить свойства в форме, чтобы скрыть систему X Control.
Я пробовал все, и это не сработало, если вы просто хотите закрыть, не показывая сообщения Message, вам просто нужно:
Частная Sub Form1_formclosing (отправитель в качестве объекта, е как формалкитериозеventargs) обрабатывает мне. Оформление
>e.Cancel = False
>FORM2.Show() (if you want to show another form)
Конец подразделения
Надеюсь, это поможет вам ...!