【问题标题】:How to set focus on button while button is disabled in winform c#?如何在winform c#中禁用按钮时将焦点设置在按钮上?
【发布时间】:2025-12-31 03:00:16
【问题描述】:

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

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

背景:

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

【问题讨论】:

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

标签: c# winforms user-interface controls


【解决方案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);
               }
           }
           
       }
    

    【讨论】:

      最近更新 更多