基本上,我希望能够在按下 ENTER 键时触发事件。我已经尝试了这个:
private void input_KeyDown(object sender, KeyEventArgs e)
{
if (e.Equals("{ENTER}"))
{
MessageBox.Show("Pressed enter.");
}
}
但MessageBox永远不会出现。我怎么能这样做?
答案 0 :(得分:25)
试一试......
private void input_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyData == Keys.Enter)
{
MessageBox.Show("Pressed enter.");
}
}
答案 1 :(得分:2)
要添加到@Willy David Jr回答:您还可以使用实际的密钥代码。
private void input_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyChar == 13)
{
MessageBox.Show("Pressed enter.");
}
}
答案 2 :(得分:2)
你实际上可以说
private void input_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
MessageBox.Show("Pressed enter.");
}
}
答案 3 :(得分:2)
如果您的表单已定义了AcceptButton,则将无法使用KeyDown捕获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);
}
}
答案 4 :(得分:1)
您可以使用Keypress事件。如果您只是在寻找“ Enter”键,那么您可能根本不在乎修饰键(例如Shift和/或Ctrl),这就是为什么大多数人会使用KeyDown而不是Keypress的原因。第二个好处是回答在实施其他答案的 any 之后几乎总是被问到的问题:“当我使用引用的代码时,为什么按Enter键会发出哔声?”这是因为需要处理Keypress事件。通过使用Keypress,您可以在一处解决这两个问题:
private void input_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Enter)
{
// Your logic here....
e.Handled = true; //Handle the Keypress event (suppress the Beep)
}
}
答案 5 :(得分:0)
你也可以这样做:
private void input_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode== Keys.Enter)
{
//Your business logic here.
}
}
KeyCode
与KeyData
的唯一区别在于KeyCode
可以检测到与KeyCode
组合的修饰符(例如CTRL,Shift + A)需要在这里。