我正在尝试完成与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/

10-11 02:09