键盘处理程序中的 enter/return 键出现问题
Trouble with enter/return key in keyboard handler
我从 C# 开始,我正在做一个计算器作为我的第一个项目。我想要一个用于我的 GUI 的键盘处理程序,它可以执行与我之前执行的按钮处理程序相同的操作。问题是当我到达 "enter" 键时。那是我的空白:
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;
}
}
问题是,如果我按下回车键,它会抛出处理程序事件,但它也会按下按钮,就像我点击它一样。这是一张图片:
有什么想法吗?谢谢:)
您需要将 KeyPressEventArgs.Handled
属性 设置为 true
。
因此,这会告诉操作系统或正常的 window 消息传递函数 (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;
}
}
覆盖表单的 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);
}
我从 C# 开始,我正在做一个计算器作为我的第一个项目。我想要一个用于我的 GUI 的键盘处理程序,它可以执行与我之前执行的按钮处理程序相同的操作。问题是当我到达 "enter" 键时。那是我的空白:
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;
}
}
问题是,如果我按下回车键,它会抛出处理程序事件,但它也会按下按钮,就像我点击它一样。这是一张图片:
有什么想法吗?谢谢:)
您需要将 KeyPressEventArgs.Handled
属性 设置为 true
。
因此,这会告诉操作系统或正常的 window 消息传递函数 (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;
}
}
覆盖表单的 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);
}