【问题标题】:How to make keys call methods within C# program如何在 C# 程序中使键调用方法
【发布时间】:2014-08-23 20:40:19
【问题描述】:

我是新来的,我可能会因为没有看到关于 Keys 的旧帖子而受到抨击,但我向你保证,我已经阅读了很多帖子,但找不到我正在寻找的答案。

我有一个 C# 程序,一个计算器,可以正确计算方程式,但我希望能够通过单击和键盘输入来调用方法。就像这样,如果用户输入 2 + 2 ENTER 文本框将显示 4。程序执行的唯一方法目前是用户是否真的点击了这些按钮。研究 Keys 如何在 C# 中工作,我发现了很多关于 KeyCode 和 Keys 的信息,但关于如何在程序中实际实现它们的信息却很少。关于实现代码,我遇到的一件事是:

private void Calculator_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Up)
        {
            MessageBox.Show("Up button was pressed");
        }
    }

表格的名称是计算器。我可以毫无问题地编译这段代码,但它似乎没有做任何事情。如果你愿意,我可以为你们放置整个程序,但它有几页长,并且有很多 cmets 和其他东西。我只是不明白为什么我不能让我的程序读取密钥。我也尝试过 KeyPress 而不是 KeyDown,仍然没有。任何帮助将不胜感激。

编辑: Marcel N. 给出了一个很好的答案,在启用 KeyPreview 并使用代码后,我能够让它工作:

protected override void OnKeyDown(KeyEventArgs e)
        { 
            if (e.KeyCode == Keys.D1)           
                cmd1.PerformClick();
            if (e.KeyCode == Keys.D2)
                cmd2.PerformClick();
            if (e.KeyCode == Keys.D3)
                cmd3.PerformClick();
            if (e.KeyCode == Keys.D4)
                cmd4.PerformClick();
             ......................
        }

我很高兴所有数字都能正常工作,但仍然无法让 Enter、Divide、Multiply 和箭头键正常工作。感谢您的快速帮助。

【问题讨论】:

    标签: c# input key keydown


    【解决方案1】:

    您需要将表单上的KeyPreview 属性设置为true。

    这将导致所有关键事件首先传递给表单,然后再委托给焦点控件。然后,您可以使用当前的 KeyDown 处理程序来调用您的方法/处理程序。

    最后,如果您根本不希望键事件到达焦点控件,请确保在表单级别收到事件时将 KeyPressEventArgs.Handled 属性设置为 true。

    【讨论】:

    • 谢谢你的工作就像一个魅力。我仍然无法让 Enter 和箭头键正常工作。
    猜你喜欢
    • 1970-01-01
    • 2018-11-18
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2014-03-01
    相关资源
    最近更新 更多