2014-09-02 55 views
0

我想在我的winapp项目中处理Ctrl + Enter keydown事件。控制+在c中输入多行文本框#

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

但是,它不工作。任何帮助?

+0

看看你的条件 - 如何'e.KeyCode'同时是'Keys.Enter'和'Keys.Control'当这些不同的价值观? – 2014-09-02 06:08:23

+0

我做了类似的事情...我会看看并回报... – Noctis 2014-09-02 06:17:25

回答

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; 
    } 
} 
+0

大声笑...当我找到它的时候,你写了它...好... :) – Noctis 2014-09-02 06:23:57

+0

@ Vishal Suthar,它正在工作,但仍然是一条新线路。如何防止换行? – 2014-09-02 06:24:04

+0

@SKPaul修正了它..我编辑了答案。 – 2014-09-02 06:41:01

6

如果你想检测一个键和修饰符,那么你测试e.KeyData,而不是e.KeyCode。在这种情况下:

if (e.KeyData == (Keys.Control | Keys.Enter)) 

注意,那就是Control修饰键的按位OR和Enter关键。

编辑:

如果点是为了防止添加一个换行符按Ctrl + 输入那么这就是你应该做的:

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    e.SuppressKeyPress = (e.KeyData == (Keys.Control | Keys.Enter)); 
}