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