首页 > 解决方案 > 如何使用“KeyCode”检查复选框?(Windows 窗体应用程序)

问题描述

我必须用“KeyCode”检查复选框。(热键)我试过了,但它有一些错误......我希望你们能帮助我:)

        private void NotYetHAX_Load(object sender, EventArgs e)
        {
            this.KeyPreview = true;
        }

        private void HotKey_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            if (e.KeyCode == Keys.K)
            {
                checkbox1.Checked();
            }
            else
            {
                checkbox.Checked = false();
            }
        }

标签: c#.netcheckbox

解决方案


我将在这里列出您可能想做的两件事:

  1. 根据您当前的代码,您似乎希望checkBox1在用户按下“K”时进行检查,而在用户按下其他任何内容时取消检查。在这种情况下,您需要做的就是稍微修改一下语法,代码就可以工作了:

    private void HotKey_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) {
        if (e.KeyCode == Keys.K)
            checkBox1.Checked = true;
        else
            checkBox1.Checked = false;
    }
    

    简化:

    private void HotKey_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) => this.checkBox1.Checked = (e.KeyCode == Keys.K);
    

    将此添加到您希望它工作的每个控件的事件处理程序中(即,您希望能够检查checkBox1任何时候这些控件中的任何一个被聚焦);这也适用于下面的那些。

    小心在这里使用空格键来切换它;取消选中空格键不起作用,因为空格键还充当“切换”按钮。如果你愿意,你可以通过这样做来修复它(肮脏的方法,如果你想让它看起来更好,你必须覆盖CheckBox我认为的类):

    private void HotKey_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) {
        if (e.KeyCode == Keys.Space)
            checkBox1.Checked = !checkBox1.Checked
        else if (e.KeyCode == Keys.K)
            checkBox1.Checked = true;
        else
            checkBox1.Checked = false;
    }

    编辑:如果您按住空格键,此代码将不起作用,因此 CheckBox 如果您希望它始终正常运行,则必须覆盖该类。但是,另一种解决方法是在CheckBox不需要单击时简单地禁用它。

  2. 您想checkBox1.Checked在按下“K”时切换

    在这种情况下,这将起到作用:

    private void HotKey_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) {
        if (e.KeyCode == Keys.K)
            checkBox1.Checked = !checkBox1.Checked;
    }
    

推荐阅读