如果正在按下的键不导致任何输入,是否有任何方法可以进入方法。即移位键,控制键等,而不必指定它们全部。理想情况下,要检测键的组合,例如Control + V = Paste。
我正在使用与以下类似的代码;
if( (e.KeyData == Keys.Left)
|| (e.KeyData == Keys.Right)
|| (e.KeyData == Keys.Home)
|| (e.KeyData == Keys.End)
|| (e.KeyData == Keys.Up)
|| (e.KeyData == Keys.Down)
|| (e.KeyData == Keys.ShiftKey)
|| (e.KeyData == Keys.ControlKey)
) return;
但不想添加每一个按键组合。
有什么想法吗?
答案 0 :(得分:4)
protected override bool ProcessCmdKey( ref Message msg, Keys keyData )
{
if ( keyData == (Keys.Control | Keys.V) )
return true;
else
return base.ProcessCmdKey( ref msg, keyData );
}
负责复制+粘贴。您也可以覆盖OnKeyPress,并根据需要使用Char.IsDigit和/或Char.IsLetter(或Char.IsLetterOrDigit)。你明白这个想法,我认为正如其他人所建议的那样,正规表达是不合理的。
答案 1 :(得分:2)
Keys值包含按下的所有键的位组合...这意味着它在给定时间可以有多个值。试试这个:
if ( (keyData & Keys.Control) == Keys.Control && (keyData & Keys.V) == Keys.V)
{
// Ctrl+V was pressed!
}
所以,这将检测键的组合......但是你必须指定它们:s
答案 2 :(得分:0)
这回答了你的问题的反面 - “如果正在按的键不会导致任何输入,则进入方法” - 但可能会得到你实际尝试的内容完成,而不是方法。
我建议在TextBox / RichTextBox控件上使用TextChanged事件处理程序。这只是在文本实际更改时被触发(无论是来自用户输入还是来自代码)。
private void richTextBox1_TextChanged(object sender, EventArgs e) {
// Handle the event.
}
如果您想知道修改内容的用户何时,您可以使用文本框的Modified
属性。
if (richTextBox1.Modified) {
// The user modified the contents of the text box.
}
这可能比尝试处理KeyDown,KeyUp,KeyPress等事件更加可靠,并且可以从按下的键中找出文本是否发生变化。
答案 3 :(得分:-1)
也许你的目的是使用正则表达式,其中“字符类”表示不可打印的字符。
例如,控制字符的unicode“general category”可能有效('抄送')。