【问题标题】:.Net Winforms Tell if Exit button was pressed.Net Winforms 判断是否按下了退出按钮
【发布时间】:2009-03-18 21:55:18
【问题描述】:

我正在使用一些控件,当发生任何事情时(包括当用户按下退出按钮时)进行验证。有没有办法判断退出按钮是否被按下?

【问题讨论】:

  • 您的意思是提供某种机制来通过诸如“关闭此表单将丢弃任何更新或添加的信息”之类的消息来阻止用户吗?

标签: .net winforms validation controls


【解决方案1】:

如果您指的是窗口右上角的关闭按钮,则需要使用 FormClosing 事件。

【讨论】:

  • 我过度使用了这种方法,以便能够在关闭之前给我的一个程序“最小化到托盘”。很简单
【解决方案2】:

要补充 Ray 所说的内容,您可以检查表单的 FormClosing 事件。

具体来说,看一下 FormClosingEventArgs 的 CloseReason 属性。如果用户点击了表单右上角的“x”,则该属性的值为 UserClosing。

但是,如果您有自己的关闭表单的关闭按钮,则此属性将具有相同的值,因此您无法判断用户是如何关闭表单的。

我所做的是在我的表单中添加一个名为 _closeButtonClicked 的 bool 字段,如果单击了我的关闭按钮,则将其设置为 true。在我的 FormClosing 事件中,我检查 e.CloseReason == UserClosing 和 _closeButtonClicked。

这对我有用,但我想知道是否有更好的方法。

【讨论】:

    【解决方案3】:

    假设退出按钮是指右上角的小“X”按钮;不。也就是说,单击按钮会直接触发 onClose 事件,而无需任何中间按钮按下或可以绑定的事件。进入 OnClose 后,您可以尝试弄清楚您是如何到达那里的,但没有“中间”步骤。我建议只是从关闭事件中调用所有验证;如果验证失败,您可以通过 onClose 事件参数取消关闭,然后从那里开始工作。

    【讨论】:

    • 这解释了我在尝试捕获 ActiveControl 对象时看到的情况。谢谢你说得对。
    【解决方案4】:

    谢谢大家。找到了一个完全避免这种情况的解决方案。

    我试图使用 Infragistics LimitToList 下拉菜单功能。但是,该功能会阻止所有其他事件触发 - 包括表单关闭!作为一种解决方法,我正在考虑检查在 LimitToList 功能内按下的退出按钮,然后禁用 LimitToList 以允许退出。所以我开始检查 ActiveControl,yada,yada,但遇到了很多问题(如果打开另一个表单会发生什么,等等)

    所以我放弃了 LimitToList 功能,并使用标准验证方法编写了自己的验证事件。为什么有人写一个先于表单关闭的功能,这超出了我的理解!

    【讨论】:

      猜你喜欢
      • 2013-05-12
      • 2010-10-22
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      相关资源
      最近更新 更多