为什么新行需要两个退格来擦除c#

时间:2015-08-01 16:42:56

标签: c# .net winforms textbox

这是前面提到的(和已解决的)问题(Unable to get desired output for keydown c#

的扩展

我有两个文本框,必须根据用户在其中一个文本框中键入的内容进行同步 现在,在你开始思考我可以简单地将文本框等同之前,我会告诉你,这不是我的最终目标。因此,复制文本是行不通的 问题:
该文本由换行符组成

//Next Line
if (e.KeyData == Keys.Enter)
   textBox2.Text += Environment.NewLine;

当用户按退格键时,它会使用

删除字符
//Remove a character
if (e.KeyCode == Keys.Back && textBox2.TextLength != 0)
   textBox2.Text = textBox2.Text.Remove(textBox2.TextLength - 1, 1);

很简单吧?这就是扭曲 每当我在换行符中写入内容并将其擦除以返回上一行时,在第一个文本框中,需要两个退格键来擦除换行符并返回到第二个文本框中的上一行。

例如,假设文本为
你好
你好

删除"嗨":
你好

(新的产品线仍然存在,因为我还没有试过去掉它)
现在,如果我想删除' o'从"你好",我必须正常按两个后退空间,我已经"地狱" (这是在我输入的第一个文本框中发生的情况)
但是,通过这样做,第二个框中的文本仍然是" Hello"。我需要第3个退格才能删除' o 此时,我的两个文本框不同步,因为
第一个文本框中的内容:" Hel"
第二个文本框中的内容:" Hell"

那么,请告诉我为什么会这样?我可以做些什么来解决它。

1 个答案:

答案 0 :(得分:2)

新行可能是一个字符。它也可能是两个。

它被称为"回车"和"换行"从我们都使用类型作家的日子回来。两个字符,一个接一个,象征着换行符。

您应该使用调试器并在添加新行时检查字符串。在您描述之后,我会发现0x0d字符后跟0x0a字符并不会感到惊讶。