我有一个简单的表单,我可以通过它输入:
12个按钮,1个文本框(禁用和只读)
这就是我处理输入的方法
Login_KeyDown()是我调用每个UI组件的所有KeyDown和表单本身的常用方法。
private void Login_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
Application.Exit();
}
else if (e.KeyCode == Keys.NumPad9 || e.KeyCode == Keys.D9)
{
button3.BackgroundImage = Properties.Resources.button_hover;
button3.ForeColor = Color.White;
pin.Text = pin.Text + "9";
}
else if (e.KeyCode == Keys.Back)
{
button11.BackgroundImage = Properties.Resources.button_hover;
button11.ForeColor = Color.White;
if (pin.Text.Length > 0)
pin.Text = pin.Text.Substring(0, pin.Text.Length - 1);
}
else if (e.KeyCode == Keys.Enter)
{
MessageBox.Show(pin.Text);
}
}
这个代码在我启动应用程序时工作正常但在我点击任何组件后,其余代码工作正常,但“输入密钥条件”不起作用。
我的猜测是“输入密钥条件”不适用于UI组件或类似的东西。
我也尝试过使用KeyPressEventArgs的“按键事件”,然后检查KeyChar == 13,但这也无法正常工作。
有什么问题,我该如何解决?
附:我没有为任何按钮设置任何按钮点击事件,该应用程序是100%基于KBoard。
查看PreviewKeyDown。返回会在按钮控件上引发该事件。
private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Return)
MessageBox.Show("I found return");
}
或者,您可以使用以下命令强制它在KeyDown事件中引发这些特殊键:
private void Form1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (e.KeyCode == Keys.Return)
e.IsInputKey = true;
}
更多信息:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx
你试过用吗?
Keys.Return
代替
编辑:想到这个。你有主要表格的接受按钮设置吗?
这是因为您的表单已定义AcceptButton。例如,您有一个“确定”,“接受”或“确认”按钮,DialogResult设置为“确定”。这告诉它的父窗体有一个AcceptButton,窗体上的Enter事件将转到此按钮。
你应该做的是在表单级别捕获Enter键。将此代码添加到表单中:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if ((this.ActiveControl == myTextBox) && (keyData == Keys.Return))
{
//do something
return true;
}
else
{
return base.ProcessCmdKey(ref msg, keyData);
}
}