C#(VS2008)抑制修饰键的键码,但保留修饰符

时间:2010-01-04 12:42:31

标签: c# c#-3.0 key keypress

我正在努力完成与同事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;

希望我在这里对我的要求很清楚。

2 个答案:

答案 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);