将字符串分配给按下的键
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
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