处理Control +在c#中的多行文本框中输入

时间:2014-09-02 06:05:56

标签: c# winforms keydown

我正在尝试在我的winapp项目中处理Ctrl + Enter keydown事件。

  private void txtAnswer_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode==Keys.Enter && e.KeyCode==Keys.Control)
        {
            //Some statements.
        }
    }

但是,它不起作用。有什么帮助吗?

2 个答案:

答案 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;
    }
}