2013-10-16 32 views
0

我使用這個代碼來阻止美元按鈕shift + 4 = $。 在此表http://expandinghead.net/keycode.html的$是碼36鍵入美元

現在的keydown代碼:

if (e.KeyValue == 36) 
{ 
    e.Handled = true; 
} 

代碼無法正常工作,爲什麼?

+0

檢查:http://stackoverflow.com/questions/8459067/winforms-capturing-the-combination-of-key-presses-using-processcmdkey -vs-keydo – MUG4N

+0

2000行爲一鍵?不用了,謝謝! – Federal09

+0

這可能不是您的應用程序中的問題,但請注意,如果用戶使用不同的鍵盤佈局,或者如果他從其他地方複製粘貼'$',他可能會繞過您的驗證。 – Vache

回答

0

這是因爲您首先按shift,然後是4,所以當使用KeyDown事件時,您將分別得到shift(鍵值16)的代碼。

要達到您想要的效果,請使用KeyPress事件,而不是KeyDownKeyPress將註冊您輸入的字符($),而不是單個按鍵。

if (e.KeyChar == '$') 
{ 
    e.Handled = true; 
} 
+0

if(e.KeyData == Keys.Shift && e.KeyData == Keys.D4) e.Handled = true; (e.KeyValue == 36 && e.KeyValue == 16) e.Handled = true;不工作 – Federal09

+0

與此代碼相同的問題if(e.KeyValue == 36 && e.KeyValue == 16) { } – Federal09

+0

@ Federal09:這沒有任何意義。 'KeyData'或'KeyValue'不能同時有兩個不同的值。 –

2

爲什麼不上KeyPress事件

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == '$') 
    { 
     e.Handled = true; 
    } 
} 
+1

是的,這就是我用於特定字符(我會使用KeyDown的特殊鍵,如PgDn或其他沒有相應的字符) –