将字符串分配给按下的键

时间:2015-08-05 17:42:16

标签: events keyboard-events monogame

            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语句。

2 个答案:

答案 0 :(得分:0)

我现在没有安装MonoGame,但对于WinForms,这涵盖所有字母,数字和Shift,如Shift。它能够拾取问号,但没有像惊叹一样。

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

对于MonoGame,KeyboardState有一个item属性,可以让你获得按下的键,并以与我上面所做的相似的方式分配它。

答案 1 :(得分:0)

GetPressedKeys()方法返回包含当前按下的键的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