如何在winform c#中禁用按钮时将焦点设置在按钮上?

Posted

技术标签:

【中文标题】如何在winform c#中禁用按钮时将焦点设置在按钮上?【英文标题】:How to set focus on button while button is disabled in winform c#? 【发布时间】:2021-05-21 20:36:02 【问题描述】:

我想在 Windows 窗体应用程序中禁用按钮时在按钮中设置焦点。

有没有办法实现这个目标?

背景:

我正在制作一个可供盲人使用的应用程序,因此当按钮启用时,屏幕阅读器将读取按钮内容,但当按钮被禁用时,屏幕阅读器将无法读取按钮内容无法专注于禁用模式

【问题讨论】:

禁用控件的全部意义在于防止它获得焦点。这是基本特征。 "我想为可访问性创建一个类似只读的按钮" 我觉得这很令人困惑。你能详细说明一下吗? @VijayMandanka 你能尝试解绑和绑定点击事件而不是让它禁用吗,对你有帮助吗? @MongZhu 我正在制作一个可供盲人使用的应用程序,因此当启用按钮时,焦点屏幕阅读器将读取按钮内容,但当禁用按钮时则无法读取通过屏幕阅读器,因为按钮无法专注于禁用模式。 为什么不添加此附加信息:在您取消挂钩事件时将“禁用”添加到按钮的文本中。这样,读者甚至可以将这些信息提供给用户 【参考方案1】:

您可以尝试通过下面的代码添加和删除点击事件,而不是在C#中启用和禁用按钮。

用于移除点击事件

button.Click -= button_Click;

用于添加点击事件

button.Click += button_Click;

供参考,您可以参考以下链接。

How to subscribe to and unsubscribe from events (C# Programming Guide)

【讨论】:

【参考方案2】:

您可以创建自定义控件并在自定义控件中创建一个属性。使用该属性来检查 OnClick 是否需要触发。

例如:

   public class buttonReadonly: Button
   
       private bool _isReadOnly = false;

       public bool isReadOnly
       
           get
           
               return _isReadOnly;
           
           set
           
               _isReadOnly = value;
           
       

       protected override void OnClick(EventArgs e)
       
           if (!isReadOnly)
           
               base.OnClick(e);
           
       
       
   

【讨论】:

以上是关于如何在winform c#中禁用按钮时将焦点设置在按钮上?的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中单击按钮时将datagridview值插入数据库

C# WinForm 文本框离开焦点事件 问题???

C# winform 父窗口子窗口按钮控制

单击按钮时将焦点设置在滚动上

C# winform 设置进入窗口后在文本框里的默认焦点

C#中,给WinForm窗体中添加了几个按钮后就不会响应键盘事件了