将字符串分配给按下的键

Assign string to the pressed key

            KeyboardState newState = Keyboard.GetState();
            if (newState.IsKeyDown(Keys.A))
            {
                _label.Text = "A";
            }
            if (newState.IsKeyDown(Keys.B))
            {
                _label.Text = "B";
            }
            if (newState.IsKeyDown(Keys.C))
            {
                _label.Text = "C";
            }

将 _label.Text 分配给按下的键的更好方法是什么?我想避免的是键盘上每个字符的 if/swich-statement。

我现在没有安装 MonoGame,但对于 WinForms,这涵盖了所有字母、数字和键,例如 Shift。它可以拾取问号,但不能拾取感叹号。

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    KeysConverter keysConverter = new KeysConverter();
    label1.Text = keysConverter.ConvertToString(e.KeyValue);
}

对于 MonoGame,KeyboardState 有一个项目 属性 应该允许您获取按下的键并以与我上面所做的类似的方式分配它。

GetPressedKeys() 方法 returns Keys 枚举的数组,其中包含当前按下的键。

 KeyboardState state = Keyboard.GetState();
 var keys = state.GetPressedKeys();

迭代并使用ToString()将枚举转换为字符串

 //let's assume that key a is pressed
 label.Text = keys[0].ToString(); //"a"

ToString() 然而并不能解决所有问题。对于大写字符,您仍应检查是否按下了 shift 键。还应映射一些特殊字符。

可以找到有效的字符键映射 here