C# WinForms复选框不响应加号/减号键-简单解决方法? 在预DOTNET VB和C++(MFC)创建的窗体上,复选框控件响应于正负键而不进行自定义编程。当焦点位于checbox控件上时,无论上一个状态如何(选中/未选中),按+将选中该框,而按-将取消选中该框,无论上一个状态如何

C# WinForms复选框不响应加号/减号键-简单解决方法? 在预DOTNET VB和C++(MFC)创建的窗体上,复选框控件响应于正负键而不进行自定义编程。当焦点位于checbox控件上时,无论上一个状态如何(选中/未选中),按+将选中该框,而按-将取消选中该框,无论上一个状态如何,c#,.net,winforms,keyboard-shortcuts,C#,.net,Winforms,Keyboard Shortcuts,C#winform复选框似乎没有表现出这种行为 所说的行为对于自动化非常非常方便,自动化程序将焦点设置为checkbox控件,并发出+或-来选中或取消选中它。如果没有此功能,则无法执行此操作,因为自动化程序(至少是我正在使用的程序)无法查询复选框的当前状态(因此它可以决定是否发出空格键以将状态切换到所需状态) 我检查了VisualStudio2008IDE中复选框的属性,没有找到任何可以恢复/启用对+/-响应的内容 因为我在控制WiFras中的源代码,我可以用一个自定义的复选框控件替换所有的复选

C#winform复选框似乎没有表现出这种行为

所说的行为对于自动化非常非常方便,自动化程序将焦点设置为checkbox控件,并发出+或-来选中或取消选中它。如果没有此功能,则无法执行此操作,因为自动化程序(至少是我正在使用的程序)无法查询复选框的当前状态(因此它可以决定是否发出空格键以将状态切换到所需状态)

我检查了VisualStudio2008IDE中复选框的属性,没有找到任何可以恢复/启用对+/-响应的内容

因为我在控制WiFras中的源代码,我可以用一个自定义的复选框控件替换所有的复选框控件,但是BLUCH,我想避免那种情况,我想我甚至不能考虑需要重构的量。


因此,底线是:有人知道比编码更改更容易恢复此行为的方法吗?

我看不到一种简单的方法来启用此功能。但是,替换现有的复选框不应该令人望而生畏:

1-创建新类库并创建新复选框(从复选框派生,重写OnKeyPress。)
2-将新库引用到现有项目。

3-搜索并将
System.Windows.Forms.Checkbox
替换为
YourNamespace.NewCheckbox
正如Jacob G所回答的那样,您可以通过以下方式轻松覆盖复选框控件:

public class MyCheckBoxOverride:CheckBox
    {
        protected override void OnKeyDown(KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Oemplus)
            {
                this.Checked = true;
            }
            else if(e.KeyCode == Keys.OemMinus)
            {
                this.Checked = false;
            }
            base.OnKeyDown(e);
        }


    }

刚刚尝试过,VB6复选框没有响应正负,但在C++ MFC应用程序中它工作了,抱歉。我刚从别人那里听到一条评论,说它在VB中工作。我知道它在MFC中起作用,因为这是我必须测试和维护的代码库,几个标准的Windows对话框也显示了这种行为。+1因为这是唯一的方法,或者捕捉每个窗体上每个复选框的on key down事件。现在那就糟透了。:)是的,这就是我得出的结论。只是在这个过程中,我不得不改变大量的项目,并打乱了不少苹果公司的购物车。在采取这样的行动之前,我需要确保没有人知道有什么灵丹妙药——它们有时确实存在,所以我想我应该试一试并在这里提问。但是,如果checkbox公开了一个类似“EnablePlusMinusInteraction”的属性,那么在你的十几个项目中,你还需要改变这一行吗?使用此解决方案,您只需使用覆盖复选框创建dll,在项目中添加引用,并更改实例化行。(无论如何,有一点可能很烦人:addreference有时非常冗长:P)是的,但改变几十个项目来使用它并不容易。