WinForm之 AcceptButton和CancelButton

领导review我代码时说,像这类WinForm窗体,如果有确认或者取消按钮时要为窗体设置 AcceptButton和CancelButton。

WinForm之 AcceptButton和CancelButton

 

 好像之前的工作中都没咋用过这玩意,这是啥属性呀,去浏览了MSDN中关于这两个属性的介绍 https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.form.acceptbutton?view=netframework-4.5

大概作用就是 当用户在该界面下按下 Enter 键和ESC键时去自动去触发 AcceptButton和CancelButton属性里设置的按钮。但对于AcceptButton属性使用Enter触发,在焦点处于界面其他控件上时可能会导致触发设置的按钮失效,文档里以多行文本框处于焦点做了举例。

本文主要是以案例的形式说一下这两个属性,在MSDN文档中没介绍的内容。我们知道当窗体以ShowDialog方式显示时,窗体关闭后会返回一个DialogResult枚举类型的结果(默认是DialogResult.None)。AcceptButton和CancelButton属性在这种情况存在一些区别。

WinForm之 AcceptButton和CancelButton

 

WinForm之 AcceptButton和CancelButton

 

 

 

WinForm之 AcceptButton和CancelButton

 

 WinForm之 AcceptButton和CancelButton

 

 点击Form1的按钮以ShowDialog方式打开Form2窗体后按下 Enter 按键,啥反应也没有,按下 ESC 键后,窗体关闭了,弹出返回值 Cancel。

WinForm之 AcceptButton和CancelButton

 

说明 CancelButton设置的按钮触发后会设置窗体DialogResult为 DialogResult.Cancel,而AcceptButton什么都不会做。为了避免是按下 Enter 键没触发按钮的怀疑,增加按钮事件后,发现 MessageBox框的确显示了。

所以如果窗体是以模态窗体的形式展示并设置了 AcceptButton属性时如果希望自动关闭窗体需要添加按钮事件,在按钮事件中明确告诉程序希望返回那种状态。例如下图所示:

WinForm之 AcceptButton和CancelButton

 

上一篇:深入理解Spring源码(开启篇)


下一篇:springcloud(九):配置中心和消息总线(配置中心终结版)