我正在尝试在我的winapp项目中处理Ctrl + Enter keydown事件。
private void txtAnswer_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode==Keys.Enter && e.KeyCode==Keys.Control)
{
//Some statements.
}
}
但是,它不起作用。有什么帮助吗?
答案 0 :(得分:7)
如果要检测键和修饰符,则测试e.KeyData
,而不是e.KeyCode
。在这种情况下:
if (e.KeyData == (Keys.Control | Keys.Enter))
请注意,这是Control
修饰符键和Enter
键的按位OR。
编辑:
如果要点是为了防止在 Ctrl + Enter 上添加换行符,那么这就是你应该做的:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
e.SuppressKeyPress = (e.KeyData == (Keys.Control | Keys.Enter));
}
答案 1 :(得分:2)
它应该是Control.ModifierKeys
,如下所示: Ctrl + Enter
private void txtAnswer_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter && Control.ModifierKeys == Keys.Control)
{
e.Handled = false;
MessageBox.Show("Ok KeyDown");
}
}
编辑:防止换行:
private bool keydowncalled = false;
private void txtAnswer_KeyDown(object sender, KeyEventArgs e)
{
keydowncalled = false;
if (e.KeyData == (Keys.Control | Keys.Enter))
{
keydowncalled = true;
MessageBox.Show("Ok KeyDown");
}
}
private void txtAnswer_KeyPress(object sender, KeyPressEventArgs e)
{
if (keydowncalled == true)
{
// Stop the newline from being entered into the control.
e.Handled = true;
}
}