2012-05-17 78 views
0

我使用以下代碼處理用戶控件中的keydown。但我想知道如何才能對按鍵進行用戶控制。C#中的忽略bool ProcessKeyPreview

const int WM_KEYDOWN = 0x100; 
const int WM_KEYUP = 0x101; 

protected override bool ProcessKeyPreview(ref Message m) 
{ 
    if (m.Msg == WM_KEYDOWN && (Keys)m.WParam == Keys.A) 
    { 
     messagebox.show("You have pressed A"); 
    } 

    return base.ProcessKeyPreview(ref m); 
} 

我想對keypress中的keychar做到這一點。

這些代碼只是給我一個例子keys.A不能讓我的工作,例如keychar =「A」

在此先感謝

+1

按鍵完成鍵盤上的循環。 –

+0

@ Mr.Disappointment我想在按鍵中選擇鍵的字符如:if(e.keychar =='A')。 – aliboy38

回答

4

按鍵事件是在KeyDown和KeyUp事件非常明顯。你只能用重寫像ProcessKeyPreview和ProcessCmdKey來重寫KeyDown事件處理。

這樣的覆蓋只看到虛擬鍵,它在任何人的鍵盤上都是一樣的。 KeyDown的默認處理然後通過Windows內的代碼發送虛擬鍵,該代碼應用用戶選擇的特定鍵盤佈局。如果這樣會產生一個鍵盤鍵,如「a」或「A」或我不知道韓國鍵盤上的鍵,會產生KeyPress事件。通過焦點直接傳遞給控件,​​您只能通過爲其KeyPress事件實現事件處理程序來在控件上攔截它。

上一段中我不知道什麼是重要的部分。試圖攔截鍵入鍵並不總是有意義的。由於「a」和「A」之間的差別很小,您的軟件中有好幾十億的潛在用戶在他們的生活中從未輸入過「A」。這是不明確的確切爲什麼你試圖這樣做,所以我不能建議另一種方法。

+0

我剛纔在談論A只是一個例子。也許他們按numpads按鈕。 – aliboy38