获取Control.KeyDown上的char?

DxC*_*xCK 7 .net c# controls char keydown

处理Control.OnKeyPress事件时,有一个KeyPressEventArgs包含a KeyChar.

出于可用性原因,我需要完全相同KeyChar但处理OnKeyDown事件时.

KeyEventArgs不包含任何字符有关的数据.我的意思是,如果A按键有或没有Shift影响KeyCode,KeyData或者KeyValue.使用另一种语言时,我仍然可以获得资本英语价值.

如何获得KeyPressEventArgs.KeyChar内部KeyDown活动?

谢谢.

mas*_*tak 9

转换它.这是将'A'转换为'a'的简单功能.它只转换[AZ]集中的大写字母.值32在"A"和"a"之间是差值.当然,您可以将其扩展到您的要求,或在此处询问功能.

char getChar( KeyEventArgs e )
{
 int keyValue = e.KeyValue;
 if ( !e.Shift && keyValue >= (int) Keys.A && keyValue <= (int) Keys.Z )
  return (char)(keyValue + 32);
 return (char) keyValue;
}
Run Code Online (Sandbox Code Playgroud)

如果你需要它来使用当前的文化,你应该重写ProcessKeyMessage控制方法:

protected override bool ProcessKeyMessage( ref Message m )
{
 if ( ( m.Msg == 0x102 ) || ( m.Msg == 0x106 ) ) // this is special - don't remove
 {
  char c = (char) m.WParam; // here is your char for OnKeyDown event ;)
 }
 return base.ProcessKeyMessage( ref m );
}
Run Code Online (Sandbox Code Playgroud)

希望它有用.

  • 我如何考虑活动语言?例如,如果活动语言是俄语,我想获得俄语字符。 (2认同)