我正在努力完成与同事here类似的事情,但是回答那里给我留下了一些不是很大的错误,但是来自用户POV的丑陋:
当它将按键数据放入文本框时,如果用户在角色之前按下修饰键(如同),则填充文本框,包括修饰符的键名。即,我得到的结果如“CTRL + SHIFT + ShiftKey”。我试图压制最后一个键码的任何事情最终都会抑制真正的键。
这是我的基本尝试(原谅我的基本尝试,我一直在打破它,并且在没有我要求的抑制的情况下重写它试图自己解决这个问题,无济于事)。
String pressed ="";
e.SuppressKeyPress = true;
if ((e.Modifiers & Keys.Control) > 0)
{
pressed += "CTRL + ";
}
if ((e.Modifiers & Keys.Alt) > 0)
{
pressed += "ALT + ";
}
if ((e.Modifiers & Keys.Shift) > 0)
{
pressed += "SHIFT + ";
}
pressed += e.KeyCode;
txtCopyKey.Text = pressed;
希望我在这里对我的要求很清楚。
答案 0 :(得分:3)
这个解决方案怎么样:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
StringBuilder sb = new StringBuilder();
if (e.Control)
{
sb.Append(Keys.Control.ToString());
sb.Append(" + ");
}
if (e.Alt)
{
sb.Append(Keys.Alt.ToString());
sb.Append(" + ");
}
if (e.Shift)
{
sb.Append(Keys.Shift.ToString());
sb.Append(" + ");
}
if (e.KeyCode != Keys.ShiftKey
&& e.KeyCode != Keys.ControlKey
&& e.KeyCode != Keys.Menu)
{
sb.Append(e.KeyCode.ToString());
}
textBox1.Text = sb.ToString();
}
答案 1 :(得分:1)
您可以删除修饰符标记:
pressed += (e.KeyCode & ~Keys.Modifiers & ~Keys.ShiftKey & ~Keys.ControlKey);