2013-10-16 34 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或其他没有相应的字符) –