WinForm之 AcceptButton和CancelButton

领导review我代码时说,像这类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属性在这种情况存在一些区别。

 

 

 

 

 

 

 

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

 

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

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

 

如果内容对您有帮助,可以扫码给我打赏,你的鼓励是我前进的动力。

 

 

 

 

posted @   业荒于嬉  阅读(618)  评论(2编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示