我正在尝试完成与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;
希望我对我的要求已经很清楚了。
最佳答案
那么这个解决方案呢:
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();
}
关于c# - C#(VS2008)抑制修饰键的键代码,但保留修饰键,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1999319/