KeyPressEventArgs的问题

时间:2012-02-08 16:45:55

标签: c# event-handling keypress

这是我的问题..我正在用C#做一个计算器而且我不想点击每一个按钮来进行操作,我想用我的数字键盘来处理...就像 如果我按“1”,请在文本框“1”中显示。

我改变了

private void cmd1_Click(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '1')
            {
                txtShow.Text='1';
            }
        }

我遇到了这个错误:

  

'cmd1_Click'没有重载符合委托“System.EventHandler”

     

this.cmd1.Click + = new System.EventHandler(this.cmd1_Click);

黑客错在哪里?

干杯。

3 个答案:

答案 0 :(得分:2)

更改

this.cmd1.Click += new System.EventHandler(this.cmd1_Click);

this.cmd1.KeyPress += new System.EventHandler(this.cmd1_Click);

您可能也想重命名cmd1_Click

正如上面的答案中所提到的,这在表格本身上会更好,而不是每个按钮。

答案 1 :(得分:1)

您正尝试将与KeyPress事件对应的事件处理程序附加到Click事件。

这里有什么问题(糟糕的复制/粘贴?):

private void cmd1_Click(object sender, KeyPressEventArgs e)

它被命名为Clickcmd1事件的自动生成事件处理程序,但其定义是KeyPress事件处理程序的定义。

您想要处理哪个事件? KeyPressClick或两者兼而有之?

答案 2 :(得分:0)

单击是鼠标事件,如果要接收键盘事件参数,则需要附加到键盘事件,您必须将所有计算器按钮放在一个公共面板中并同时处理按钮单击“和”文本被发送到面板,这样你就可以对任何地方的两个按键做出反应,并点击相同的结果。

一个简单的方法来处理所有按钮的事件,而不是一个一个地执行它是一个按钮单击处理程序并检查控件的文本属性以了解如何操作(将发送者强制转换为按钮并检查文字,开启那个)

未经测试:

switch(((button)sender).Text)
{
    case "1":
          // react to user having pressed 1 etc etc
}