Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法获取键控c的所需输出#_C#_.net_Winforms_Keydown - Fatal编程技术网

C# 无法获取键控c的所需输出#

C# 无法获取键控c的所需输出#,c#,.net,winforms,keydown,C#,.net,Winforms,Keydown,我正在尝试使用windows窗体创建两个同步文本框,但似乎遇到了多个问题。也许你们能帮我提高效率。 正如您所看到的,enter键没有问题,因为我已经解决了这个问题 当我按住shift键时,我看到一个特殊符号 按backspace键将向该行添加新符号 同时按下后退键不会多次删除或添加(新符号)。我假设每次按下后退键都会删除1个字符 后退键不会删除新行(“\n\r”) 最后两行分别用于alt键和ctrl键 到目前为止,此表单的代码是 private void textBox1_KeyDown(ob

我正在尝试使用windows窗体创建两个同步文本框,但似乎遇到了多个问题。也许你们能帮我提高效率。

正如您所看到的,enter键没有问题,因为我已经解决了这个问题

  • 当我按住shift键时,我看到一个特殊符号
  • 按backspace键将向该行添加新符号
  • 同时按下后退键不会多次删除或添加(新符号)。我假设每次按下后退键都会删除1个字符
  • 后退键不会删除新行(“\n\r”)
  • 最后两行分别用于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";
        }
    
    private void textBox1\u KeyDown(对象发送方,KeyEventArgs e)
    {
    //禁用箭头键的使用
    如果(e.KeyCode==Keys.Left | | e.KeyCode==Keys.Right | | e.KeyCode==Keys.Up | | e.KeyCode==Keys.Down)
    {
    e、 SuppressKeyPress=true;
    }
    //删除字符
    if(e.KeyCode==Keys.Back)
    textBox2.Text=textBox2.Text.Remove(textBox2.TextLength-1,1);
    //大小写字符
    
    如果(!e.Shift&&e.KeyCode>=Keys.A&&e.KeyCode为什么不将文本从第一个文本框复制到第二个文本框:

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

    我同意M4N的说法,只需将文本从一个文本框复制到下一个文本框就可以轻松得多

    然而,如果你打算这样做,还有很长的路要走

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

    这里是指向MSDN网站上的值的链接

    您可以使用类似的方法将字符更改为大写

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

    来自

    的解决方案我已经解决了这个问题。它符合用户3649914的建议。
    下面已经解决了这个问题,但是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 += "";
    
    //大小写字符
    
    如果(!e.Shift&&e.KeyCode>=Keys.A&&e.KeyCode=Keys.A&&e.KeyCode>为什么要这样同步?在两个文本框中显示相同的值怎么样?如果只同步显示的值会容易得多。但我不知道这在您的场景中是否可用。@sjoerd222888这不是我的最终目的。我希望转换每个输入实时转换为不同的表示形式。目前,我只是检查每个输入的含义。这不是我的最终目的。我希望实时将每个输入转换为不同的表示形式。目前,我只是检查每个输入的含义。
    //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 += "";