3

我正在尝试完成与这里的人类似的事情,但是那里的答案给我留下了一些错误,这不是什么大不了的事,但从用户 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;

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

4

2 回答 2

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();
}
于 2010-01-04T13:17:58.567 回答
1

您可以删除修饰符标志:

pressed += (e.KeyCode & ~Keys.Modifiers & ~Keys.ShiftKey  & ~Keys.ControlKey);
于 2010-01-04T13:04:21.960 回答