c#-将Windows窗体键转换为字符串

我在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.

上一篇:c#-在运行时创建新设置,并在重新启动后读取


下一篇:C#-将GLcontrol添加到Visual Studio工具箱