【问题标题】:Remapping Keys on Application在应用程序上重新映射键
【发布时间】:2016-04-10 18:36:49
【问题描述】:

在我的程序中,我希望能够在键盘上输入“E”并将其作为不同的字母输出到文本框中,例如“F”。

在发送密钥时不会发生冲突的最有效方法是什么?

    private void textBox_KeyDown(object sender, KeyEventArgs e)
    {
        switch(e.KeyCode)
        {
            case Keys.E:
                e.SuppressKeyPress = true;
                SendKeys.Send("F".ToLowerInvariant());
                break; 
            case Keys.F:
                e.SuppressKeyPress = true;
                SendKeys.Send("E".ToLowerInvariant());
                break;            
        }
    }

我尝试使用上面的方法,但最终发生冲突,并最终发送了不同的信。

【问题讨论】:

  • 为什么不直接key = 'T'?
  • @MathiasR.Jessen 它目前正在这样工作,但有没有办法实际输出设置的字母?我认为ascii会解决这个问题。如果我输入 F,它会将其记录为 T,但仍会输出 F。
  • 什么输出F?您正在处理哪个事件?你如何分配key?请提供a Minimal, Complete, and Verifiable example
  • @MathiasR.Jessen 我编辑了帖子并尝试了不同的方法,但没有运气!

标签: c# ascii keymapping


【解决方案1】:

您应该为此使用KeyPress 事件,而不是KeyDown/KeyUp 事件。

private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    switch (e.KeyChar.ToString().ToUpper())
    {
        case "E":
            e.KeyChar = 'f';
            break;
        case "F":
            e.KeyChar = 'e';
            break;
    }
}

【讨论】:

  • 是否可以使用 LowerInvariant 或 Upper?这样我就不必为小写字母创建更多的案例
猜你喜欢
  • 1970-01-01
  • 2020-09-18
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多