.Net Winforms告诉我是否按下了退出按钮

时间:2009-03-18 21:55:19

标签: .net winforms validation controls

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

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:6)

要添加到Ray所说的内容,您可以检查表单的FormClosing事件。

具体来说,请查看FormClosingEventArgs的CloseReason属性。如果用户单击表单右上角的“x”,则此属性的值将为UserClosing。

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

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

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

答案 2 :(得分:1)

假设退出按钮指的是右上角的小'X'按钮;没有。也就是说,单击该按钮可直接触发onClose事件,无需按任何中间按钮或可绑定的事件。一旦你进入OnClose,你可以尝试弄清楚你是如何到达那里的,但是没有“中间”步骤。我推荐的是从close事件中调用所有验证;如果验证失败,您可以通过onClose事件args取消关闭,并从那里开始工作。

答案 3 :(得分:1)

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

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

所以我废弃了LimitToList功能,并使用标准验证方法编写了我自己的验证事件。为什么有人写一个先发制人关闭的功能超出了我的范围!