3

如果按下的键没有导致任何输入,是否有任何方法可以进入方法。即shift键,控制键等,而不必指定所有这些。理想情况下,检测按键组合,例如 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;

但不想添加每一个按键组合。

有任何想法吗?

4

4 回答 4

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)。你明白了,我认为这里不需要正则表达式,正如其他一些人所建议的那样。

于 2010-11-16T04:28:04.980 回答
2

Keys 值包含所有按下的键的位组合...这意味着它在给定时间可以有多个值。尝试这个:

if ( (keyData & Keys.Control) == Keys.Control && (keyData & Keys.V) == Keys.V) 
{ 
// Ctrl+V was pressed! 
} 

所以,这将检测到键的组合......但你将不得不指定它们:s

看看这个: http ://www.go4expert.com/forums/showthread.php?t=713

于 2010-11-16T04:23:05.013 回答
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 等事件并根据按下的键确定文本是否更改更可靠。

于 2011-04-29T14:26:29.417 回答
-1

也许使用正则表达式可以满足您的目的,它带有一个指示不可打印字符的“字符类”。

例如,控制字符的 unicode“通用类别”可能会起作用 ('Cc')。

于 2010-11-16T04:16:53.313 回答