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