Где я управляю поведением “X” близкая кнопка в верхнем правом углу winform?

Я рискую в подавание моей заявки VB.NET немного лучше для использования путем создания некоторых форм немодальными.

Я думаю, что выяснил, как использовать dlg. Покажите () и dlg. Скройтесь () вместо того, чтобы назвать dlg. ShowDialog (). У меня есть экземпляр моего немодального диалогового окна в моей форме главного приложения:

Public theModelessDialog As New dlgModeless

Для разжигания немодального диалогового окна, я звоню

theModelessDialog.Show()

и в OK и обработчиках Кнопок отмены в 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.

16
задан tshepang 27 February 2014 в 14:50
поделиться

3 ответа

Используйте Me.Close () , чтобы скрыть форму. Чтобы открыть его, используйте следующий фрагмент:

If theModelessDialog.IsDisposed Then
    theModelessDialog = New dlgModeless
End If
dlgModeless.Show()

Если это сохранение данных, вам нужно придумать какой-нибудь способ их сохранения (возможно, в статической переменной / s в форме). Однако это правильный способ делать то, чего вы пытаетесь достичь.

Вы также должны простить меня, если мой VB отключен, это было давно.

4
ответ дан 30 November 2019 в 21:18
поделиться

Перехватите событие FormClosing и, если причина в UserClosing, установите для параметра Cancel для события значение 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
21
ответ дан 30 November 2019 в 21:18
поделиться

Согласен с обработкой события FormClosing. Или измените свойства формы, чтобы скрыть элемент управления System X.

0
ответ дан 30 November 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: