我从C#开始,我正在做一个计算器作为我的第一个项目。我想为我的GUI使用键盘处理程序,它与我之前使用的按钮处理程序进行相同的操作。问题是当我进入“输入”键时。那是我的无效:
private void keyboardHandler(object sender, KeyPressEventArgs e){
char keyPressed = e.KeyChar;
if (keyPressed >= (char)Keys.D0 && keyPressed <= (char)Keys.D9)
{
//Some stuff
}
else if (keyPressed == (char)Keys.Back)
{
//More stuff
}
else if (keyPressed == (char)Keys.Enter || keyPressed == (char)Keys.Return)
{
this.operate();
operator = operation.START;
}
}
问题是,如果我按下回车键,它会抛出处理程序事件但它也按下按钮,就像我点击它一样。这是一张图片:
有什么想法吗?谢谢:))
答案 0 :(得分:3)
覆盖表单的ProcessCmdKey
处理程序。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Enter)
{
this.operate();
operator = operation.START;
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
答案 1 :(得分:2)
您需要将KeyPressEventArgs.Handled
属性设置为true
。
因此,这告诉操作系统或普通窗口消息传递函数(WndProc)忽略按键,因为它已经处于危险状态。请参阅:https://msdn.microsoft.com/en-us/library/system.windows.forms.keypresseventargs.handled%28v=vs.110%29.aspx
所以喜欢:
private void keyboardHandler(object sender, KeyPressEventArgs e){
char keyPressed = e.KeyChar;
if (keyPressed >= (char)Keys.D0 && keyPressed <= (char)Keys.D9)
{
//Some stuff
}
else if (keyPressed == (char)Keys.Back)
{
//More stuff
}
else if (keyPressed == (char)Keys.Enter || keyPressed == (char)Keys.Return)
{
this.operate();
operator = operation.START;
e.Handled = true;
}
}