我在Windows窗体应用程序中响应KeyDown事件处理程序.在此事件处理程序中,我想将KeyEventArgs KeyCode转换为字符串.当我们处理字母,数字或数字键盘上的字符时,这没问题.尝试转换以下字符时会遇到困难:< > ,. ; ‘//?
我当前的转换方法是:
private string ConvertKeyCodeToString(System.Windows.Forms.Keys keyCode, bool shiftPressed)
{
string key = new System.Windows.Forms.KeysConverter().ConvertToString(keyCode);
if (key.Contains("NumPad"))
{
key = key.Replace("NumPad", "");
}
if (key.Equals("Space"))
{
key = " ";
}
if (!shiftPressed)
{
key = key.ToLower();
}
return key;
}
现在,我正在调用ConvertToString而不是ConvertToInvariantString,因为这样做似乎没有任何改变.我注意到,引起问题的每个特殊字符似乎都以“ oem”开头.
对我而言,最好的解决方案似乎是使用某种列表将密钥转换为字符串.如果按下的键当然是特殊字符.恐怕这会引起与键盘文化有关的问题.
所以我的问题是:如何根据当前的文化将特殊字符的按键转换为字符串表示形式?
解决方法:
听起来您可能想使用KeyPress而不是KeyDown:
private void keypressed(Object o, KeyPressEventArgs e)
{
char key = e.KeyChar; // the character representation of the key that was pressed
}
对于非字符键(例如方向键和功能键),将引发KeyDown.