[英]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.