【发布时间】:2013-02-28 14:36:45
【问题描述】:
我有一个带有后台线程的 Windows 窗体文本框,它每秒都会更新它的值。 如果我将光标放在文本框中,它将在下次更新时失去其当前位置。文本选择也是如此。
我试图这样解决它
protected void SetTextProgrammatically(string value)
{
// save current cursor position and selection
int start = textBox.SelectionStart;
int length = textBox.SelectionLength;
// update text
textBox.Text = value;
// restore cursor position and selection
textBox.SelectionStart = start;
textBox.SelectionLength = length;
}
它大部分时间都很好用。这是它不起作用的情况:
1) 我将光标放在文本框中文本的末尾
2) 按 SHIFT 并使用 向左移动光标
选择将无法正常工作。
看起来 SelectionStart=10 和 SelectionLength=1 的组合会自动将光标移动到位置 11(不是我想要的 10)。
如果有什么我可以做的,请告诉我!我正在使用 Framework.NET 2.0。
除了SelectionStart+SelectionLength之外,必须有一种方法可以在文本框中设置光标位置。
【问题讨论】:
-
它将在下次更新时失去当前位置是什么意思?你想达到什么目的?
-
表示光标会跳转到文本的开头
-
我希望这个文本框能像任何其他文本框一样工作。它现在的工作方式有时令人恼火。我的意思是我只能在这个文本框中选择文本,只能从左到右移动。我就是不能从右到左移动
-
我认为你看到的行为是正常行为。光标始终在选择的末尾,使用箭头键会导致选择长度为 0。
-
你是绝对正确的。我同意你的看法。但是在普通文本框中,您可以选择从右到左移动的文本,对吗?我的文本框的唯一区别是它的文本在我尝试使用它时在背景中发生变化。