C# 如何在没有选择的情况下设置文本框光标位置Start
我有一个Windows窗体文本框,背景线程每秒更新其值。 若我将光标放在文本框内,它将在下次更新时失去当前位置。文本选择也是如此 我试着这样解决它C# 如何在没有选择的情况下设置文本框光标位置Start,c#,winforms,.net-2.0,C#,Winforms,.net 2.0,我有一个Windows窗体文本框,背景线程每秒更新其值。 若我将光标放在文本框内,它将在下次更新时失去当前位置。文本选择也是如此 我试着这样解决它 protected void SetTextProgrammatically(string value) { // save current cursor position and selection int start = textBox.SelectionStart; int len
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键并使用将光标向左移动我已找到解决方案
// save current cursor position and selection
int start = textBox.SelectionStart;
int length = textBox.SelectionLength;
Point point = new Point();
User32.GetCaretPos(out point);
// update text
textBox.Text = value;
// restore cursor position and selection
textBox.Select(start, length);
User32.SetCaretPos(point.X, point.Y);
现在它可以正常工作了。要在文本框中设置光标位置而不选择“开始…”
textbox1.Select(textbox1.text.length,0); /* ===> End of the textbox */
textbox1.Select(0,0); /* ===> Start of the textbox */
下一次更新时,它将失去当前位置意味着什么?你想实现什么?这意味着光标将跳转到文本的开头。我希望这个文本框和其他文本框一样工作。它现在的工作方式有时令人恼火。我的意思是我只能从左到右选择这个文本框中的文本。我不能从右向左移动我认为你看到的行为是正常的。光标始终位于选择的末尾,使用箭头键会导致选择长度为0。您完全正确。我同意你的看法。但在普通文本框中,您可以选择从右向左移动的文本,对吗?我的文本框的唯一区别是,当我尝试使用它时,它的文本在后台发生变化。我看不出你的建议和我已经使用的代码之间的区别。抱歉。。我忘记了Select(),不幸的是,它不是解决方案-没有任何更改。我仍然无法选择文本框中的文本,将光标从右向左移动。我发布了用于测试该功能的全部代码,它对我来说很有效,包括从右向左选择。这很奇怪,建议的代码不应该工作(就像我的代码一样)。但这对我来说仍然不起作用。函数Select(start,length)将光标放在选择的末尾(您可以看到它)。只有当您从右向左移动时才会出现问题,因为在这种情况下,您的移动方向相反;它从1开始,留下一个空格。我的面具是“000-000-0000”
textbox1.Select(textbox1.text.length,0); /* ===> End of the textbox */
textbox1.Select(0,0); /* ===> Start of the textbox */