【问题标题】:Unable to get desired output for keydown c#无法为keydown c#获得所需的输出
【发布时间】:2015-08-01 08:56:43
【问题描述】:

我正在尝试使用 Windows 窗体创建两个同步的文本框,但我似乎遇到了多个问题。也许你们可以帮助我让事情变得更有效率。

如您所见,回车键没有问题,因为我已经解决了这个问题。

  1. 我在按住 shift 键时看到一个特殊符号
  2. 按退格键会在该行中添加一个新符号。
  3. 同时按下后退键不会多次删除或添加(新符号)。我假设每次按下后退键都会删除 1 个字符。
  4. 后退键不会擦除新行(“\n\r”);
  5. 最后两行分别用于 alt 和 ctrl 键。

到目前为止这个表单的代码是

private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        //Disable usage of arrowkeys
        if(e.KeyCode==Keys.Left || e.KeyCode==Keys.Right || e.KeyCode==Keys.Up || e.KeyCode==Keys.Down)
        {
            e.SuppressKeyPress=true;
        }

        //Remove a character
        if (e.KeyCode == Keys.Back)
            textBox2.Text = textBox2.Text.Remove(textBox2.TextLength - 1, 1);

        //Upper and lower case characters
        if (!e.Shift && e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z)
            textBox2.Text += (char)(e.KeyValue + 32);
        else
            textBox2.Text += (char)(e.KeyValue);

        //Next Line
        if (e.KeyData == Keys.Enter)
            textBox2.Text += "\n\r";
    }

你建议我做什么?

编辑:这不是我的最终意图。我希望将每个输入实时转换为不同的表示形式。现在,我只是检查每个输入的含义。

【问题讨论】:

  • 为什么要这样同步?在两个文本框中显示相同的值怎么样?如果您只是同步显示的值,那会容易得多。但我不知道这是否适用于您的场景。
  • @Sjoerd2228888 这不是我的最终意图。我希望将每个输入实时转换为不同的表示形式。现在,我只是检查每个输入的含义。

标签: c# .net winforms keydown


【解决方案1】:

我同意 M4N,将文本从一个文本框复制到下一个文本框会容易得多。

但是,如果您打算这样做,还有很长的路要走。

每次按键都会有一个值,您可以转义所有不想使用的键。

这是来自 MSDN 网站的值的链接

https://msdn.microsoft.com/en-us/library/aa243025(v=vs.60).aspx

您已准备好使用类似的方法将字符更改为大写。

If (e.KeyValue >= 65 && e.KeyValue <= 90 ){
 #check for spaces and return the enter add to other text box.
}

或者更好的是,使用正则表达式模式。

Regex regex = new Regex(@"[0-9A-Z\s]+");
MatchCollection matches = regex.Matches(textValue);

来自Only allow specific characters in textbox的解决方案

【讨论】:

    【解决方案2】:

    为什么不简单地将第一个文本框中的文本复制到第二个文本框中:

    private void textBox1_KeyDown(object sender, KeyEventArgs e)
    {
        textBox2.Text = textBox1.Text;
    }
    

    【讨论】:

    • 这不是我的最终意图。我希望将每个输入实时转换为不同的表示形式。现在,我只是检查每个输入的含义。
    【解决方案3】:

    我已经解决了这个问题。这与 user3649914 建议的内容一致。
    以下解决了该问题,但在这种情况下,if else 条件的顺序非常关键。不确定如此严重地依赖 if else 的顺序是否是一种好的编程习惯。

    //Upper and lower case characters
    if (!e.Shift && e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z)
       textBox2.Text += (char)(e.KeyValue + 32);
    else if (e.Shift && e.KeyCode >= Keys.A && e.KeyCode <= Keys.Z)
        textBox2.Text += (char)(e.KeyValue);
    else if (e.Shift || e.Alt || e.Control)
        textBox2.Text += "";
    

    这个想法是 user3649914 提到的,关于 t

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 2017-07-04
      • 2021-10-04
      • 1970-01-01
      • 2021-07-14
      • 1970-01-01
      相关资源
      最近更新 更多