/ / Jak ustawić pozycję kursora TextBox bez SelectionStart - c #, winforms, .net-2.0

Jak ustawić pozycję kursora TextBox bez SelectionStart - c #, winforms, .net-2.0

Mam pole tekstowe Windows Forms z tłemwątek aktualizuje swoją wartość co sekundę. Jeśli ustawię kursor w polu tekstowym, podczas następnej aktualizacji straci swoją aktualną pozycję. To samo z zaznaczaniem tekstu.

Próbowałem tak rozwiązać

    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;
}

Przez większość czasu działa dobrze. Oto sytuacja, gdy to nie działa:
1) Umieszczam kursor na końcu tekstu w polu tekstowym
2) naciśnij SHIFT i przesuń kursor w lewo za pomocą klawisza strzałki <-
Wybór nie działa poprawnie.

Wygląda jak połączenie SelectionStart=10 i SelectionLength=1 automatycznie przesuwa kursor na pozycję 11 (a nie 10 tak, jak tego chcę).

Daj mi znać, jeśli mogę coś z tym zrobić! Korzystam z Framework.NET 2.0.
Musi istnieć sposób na ustawienie pozycji kursora w polu tekstowym innym niż SelectionStart+SelectionLength.

Odpowiedzi:

4 dla odpowiedzi № 1
//save position
bool focused = textBox1.Focused;
int start = textBox1.SelectionStart;
int len = textBox1.SelectionLength;
//do your work
textBox1.Text = "duviubobioub";
//restore
textBox1.SelectionStart = start;
textBox1.SelectionLength = len ;
textBox1.Select();

3 dla odpowiedzi № 2

Znalazłem rozwiązanie!

        // 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);

Teraz działa tak, jak powinien.


0 dla odpowiedzi № 3

Aby ustawić pozycję kursora w polu tekstowym bez zaznaczania, rozpocznij ...!

textbox1.Select(textbox1.text.length,0); /* ===> End of the textbox  */
textbox1.Select(0,0);                    /* ===> Start of the textbox  */