无法获得keydown c#所需的输出

时间:2015-08-01 08:56:44

标签: c# .net winforms keydown

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

正如您所看到的,输入键没有问题,因为我已经处理了这个问题。

  1. 当我按住shift键时,我看到一个特殊的符号
  2. 按退格键为该行添加一个新符号。
  3. 同时按下后退键不会多次删除或添加(新符号)。我假设每次按下后退键都会删除1个字符。
  4. 后退键不会删除新行(“\ n \ r”);
  5. 最后两行分别用于alt和ctrl键。
  6. 到目前为止,此表单的代码是

    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";
        }
    

    你建议我做什么?

    编辑:这不是我的最终目的。我希望将每个输入实时转换为不同的表示形式。现在,我只是检查每个输入可能意味着什么。

3 个答案:

答案 0 :(得分:2)

我同意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

解决方案

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我已经解决过了。它与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