【问题标题】:Why new line takes two backspaces to erase c#为什么新行需要两个退格键来擦除 c#
【发布时间】:2015-08-01 16:42:56
【问题描述】:

这是对先前陈述(并已解决)的问题 (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);

很简单,对吧?这是转折点。
每次我在换行符中写一些东西,然后擦除它以返回到上一行,在第一个文本框中,需要两个退格键来擦除换行符并返回到第二个文本框中的上一行。

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

删除“嗨”:
你好

(新行仍然存在,因为我还没有尝试删除它)

现在,如果我想从“Hello”中删除“o”,我通常必须按两个后退空格,然后我会得到“Hell”(这就是我正在输入的第一个文本框中发生的情况) 但是,通过这样做,第二个框中的文本仍然是“Hello”。我需要第三次退格来删除“o”。
此时,我的两个文本框不同步,因为
第一个文本框中的内容:“Hel”
第二个文本框中的内容:“地狱”

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

【问题讨论】:

  • 你对var len = Environment.NewLine.Length;有什么期望? 12 ?
  • 不是很清楚到底发生了什么,你能展示一些代码和一个清楚的例子,说明什么时候发生了什么?
  • @terrybozzio 代码在我在问题早期部分指定的链接中。举个例子,我已经把它写下来了,因为每一步都截屏并不完全可行

标签: c# .net winforms textbox


【解决方案1】:

换行可能是一个字符。也可能是两个。

在我们都使用打字机的时代,它被称为“回车”和“换行”。两个字符,一个接一个,象征换行。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    • 1970-01-01
    • 2022-11-27
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多