C#(VS2008)抑制修改器关键点的关键码,但保留修改器
我试图完成一些类似于那个家伙的事情,但按照答案,会给我留下一个小错误,这不是什么大问题,但从用户角度来看是丑陋的: 当它将按键数据放入文本框时,如果用户在字符之前按修改器键(就像一个人那样),文本框将被填充,包括修改器的键名。也就是说,我得到的结果类似于“CTRL+SHIFT+ShiftKey”。我试图抑制最后一个键代码的任何操作最终也会抑制真正的键 这是我的基本尝试(请原谅我的封锁,我一直在打破它,重写它的一部分,试图自己解决这个问题,但无济于事),没有我要求的压制C#(VS2008)抑制修改器关键点的关键码,但保留修改器,c#,c#-3.0,key,keypress,C#,C# 3.0,Key,Keypress,我试图完成一些类似于那个家伙的事情,但按照答案,会给我留下一个小错误,这不是什么大问题,但从用户角度来看是丑陋的: 当它将按键数据放入文本框时,如果用户在字符之前按修改器键(就像一个人那样),文本框将被填充,包括修改器的键名。也就是说,我得到的结果类似于“CTRL+SHIFT+ShiftKey”。我试图抑制最后一个键代码的任何操作最终也会抑制真正的键 这是我的基本尝试(请原谅我的封锁,我一直在打破它,重写它的一部分,试图自己解决这个问题,但无济于事),没有我要求的压制 String presse
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;
希望我在这里对我的问题足够清楚 您可以删除修改器标志:
pressed += (e.KeyCode & ~Keys.Modifiers & ~Keys.ShiftKey & ~Keys.ControlKey);
这个解决方案怎么样:
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();
}
您可能会侥幸逃脱,但严格来说,您应该使用
=0
此处,而不是>0
,就好像设置了MSB一样,它将显示为负数。您是对的。我已经修好了。谢谢。不幸的是,这似乎并不能阻止它返回修改键本身。谢谢,你改了吗?现在它可以正常工作了,只正确地处理修改器键的情况,但当字符键最终被按下时,它会以错误的键结束(即Ctrl-X导致“Ctrl+H”,Ctrl-C导致“Ctrl+64”)我确实想到了这一点。我想确保我没有错过一个更优雅的方式来做这件事。我会很快测试出来,谢谢。关于优雅的方式,请看