C# 如何在没有选择的情况下设置文本框光标位置Start

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

我有一个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键并使用将光标向左移动我已找到解决方案

        // 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  */