【问题标题】:How do you create a CheckedListBox WinForm control that is completely unresponsive to keyboard input?如何创建一个对键盘输入完全无响应的 CheckedListBox WinForm 控件?
【发布时间】:2026-02-03 12:35:01
【问题描述】:

我尝试创建一个自定义 CheckedListBox 并覆盖 OnKeyUp、OnKeyPress、OnKeyDown、OnPreviewKeyDown 方法,但我无法完成我想要完成的任务。

现在基本上发生的事情是,如果用户在 CheckedListBox 具有焦点时按下一个键,则所选项目会发生变化。例如,如果用户按下向上或向下键,则选中 CheckedListBox 中的下一个/上一个项目。如果用户按下“A”,则选择以字母“A”开头的第一个项目。

我希望 CheckedListBox 的行为方式是它完全不响应按键(但仍响应鼠标点击)。

谁能告诉我如何做到这一点?

【问题讨论】:

    标签: c# .net winforms checkedlistbox


    【解决方案1】:

    我认为可以通过从 CheckedListBox 继承并覆盖它的 ProcessCmdKey() 方法以返回 true 来实现这一点。那应该忽略所有命令。

    我会在解决方案中试一试并报告:)

    更新:

    它有效。 我使用的代码:

    using System.Windows.Forms;
    
    public class CheckedListBoxIgnoreKeyboard : CheckedListBox
    {
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            return true;
        }
    }
    

    控件需要重建才能显示在工具箱中。

    【讨论】:

    • @JohnSmith:我刚刚对其进行了测试,当我按下与控件内元素的第一个字母相对应的按钮时,没有任何反应。
    • 我为错误信息道歉。我在 KeyUp 事件处理程序中的代码搞砸了。
    【解决方案2】:

    您是否尝试过使用 KeyDown 事件?

      e.SuppressKeyPress = true;
    

    看来,在我这边工作

    【讨论】:

      最近更新 更多