【发布时间】: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;有什么期望? 1 或 2 ? -
不是很清楚到底发生了什么,你能展示一些代码和一个清楚的例子,说明什么时候发生了什么?
-
@terrybozzio 代码在我在问题早期部分指定的链接中。举个例子,我已经把它写下来了,因为每一步都截屏并不完全可行