簡體   English   中英

C#檢測按鍵,避免使用非鍵入鍵

[英]C# Detect Key Press, avoid non-typing keys

如果正在按下的鍵不導致任何鍵入,是否有任何方法可以進入方法。 即移位鍵,控制鍵等,而不必指定所有鍵。 理想情況下,檢測鍵的組合,例如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;

但是不想添加每一個按鍵組合。

有任何想法嗎?

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)。 你明白這個想法,我認為正如其他人所建議的那樣,正規表達是不合理的。

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

這回答了你的問題的反面 - “如果正在按下的鍵不會導致任何輸入,則進入方法” - 但可能會得到你實際想要完成的內容,而不是方法。

我建議在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等事件以及從按下的鍵中找出文本是否發生變化更可靠。

也許它的目的是使用正則表達式,其中“字符類”表示不可打印的字符。

例如,控制字符的unicode“ 常規類別 ”可能有效('Cc')。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM