Vb.net: различать me.close () и x-button

как можно отличить событие, когда пользователь явно нажал кнопку x (или нажал ALT F4), чтобы закрыть форму, и все другие методы программного закрытия формы (me.close () и т. д.). Я уже понял, что это можно сделать с помощью объектов-отправителей, но я этого не понимаю. Может ли кто-нибудь объяснить мне это на примере? Заранее всем большое спасибо.

Предполагая, что вы используете событие FormClosing, sender всегда будет самой формой, поскольку именно он отправил / инициировал событие. Аргументы события сообщают вам причину.

Ňɏssa Pøngjǣrdenlarp 08.04.2018 17:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
560
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это так просто. :)

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs)
e.Cancel = True
End Sub

Это предотвратит закрытие формы кнопкой X, а также :). Проблема в том, что если вы сделаете это, вы не сможете закрыть свою форму и с помощью Me.Close. Чтобы исправить это, просто удалите EventHandler :)

  RemoveHandler Me.Closing, AddressOf Form1_FormClosing
  'Now close the form
  Me.Close()
Ответ принят как подходящий

Аргументы события класса FormClosingEventArgs имеют перечисление, чтобы указать, по какой причине форма закрывается.

https://msdn.microsoft.com/en-us/library/system.windows.forms.closereason(v=vs.110).aspx

Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles Me.Closing

    If Not appClosing AndAlso e.CloseReason = System.Windows.Forms.CloseReason.UserClosing Then

    ' DO WHATEVER CODE YOU WANT IN HERE
    ' LIKE SETTING E.CANCEL TO TRUE

    End If

End Sub

' You can also set a close appClosing local variable at the class level as a boolean, whenever you call closing in code, assign the variable.
appClosing = True
Me.Close();

Спасибо, Ctznkane, он попробовал именно это, и проблема в том, что команда if также выполняется, когда я отправляю me.close () из кода. Кажется, есть настоящие Close.Reasons, чтобы различать me.close () и x-button !?

Luke P 09.04.2018 10:58

Другие вопросы по теме