У меня есть текстовое поле (например, textBox1), к которому я периодически добавляю символ (каждую секунду или около того). Я хотел бы сделать так, чтобы, когда текст становится слишком длинным, чтобы поместиться в текстовое поле, переполнение будет фактически идти влево от текстового поля, даже если оно не сфокусировано вместо нормального поведения, которое находится справа, таким образом последний символ всегда будет показано.
То, как я это сделал, когда я добавляю персонажа, я также делаю:
textBox1.ScrollToHorizontalOffset(textBox1.GetRectFromCharacterIndex(textBox1.Text.Length).Right);
Это работает хорошо, пока длина текста не станет достаточно длинной. После этого прокрутка точки просто прекратится, и текущее левое переполнение останется, но новое переполнение перейдет справа от текстового поля.
Для тестирования я пишу текущую длину текста и textBox1.GetRectFromCharacterIndex (textBox1.Text.Length). Право на консоль при каждом обновлении:
...
Length: 22
Rect.Right: 81.99
Length: 23
Rect.Right: 85.4
Length: 24
Rect.Right: 88.81
Length: 25
Rect.Right: 91.41
Length: 26
Rect.Right: 91.41
Length: 27
Rect.Right: 91.4099999999999
Length: 28
Rect.Right: 91.4099999999999
Length: 29
Rect.Right: 91.4099999999999
Length: 30
Rect.Right: 91.4099999999999
...
Length: 47
Rect.Right: 91.4099999999999
Length: 48
Rect.Right: 91.4099999999999
Length: 49
Rect.Right: 91.4099999999999
Length: 50
Rect.Right: 91.4099999999999
Length: 51
Rect.Right: 91.4099999999999
Length: 52
Rect.Right: 92.88
Length: 53
Rect.Right: 94.8199999999999
Length: 54
Rect.Right: 96.29
Length: 55
Rect.Right: 98.2299999999999
Length: 56
Rect.Right: 99.7
Length: 57
Rect.Right: 101.64
До того как Text.Length равно 25, текстовое поле все еще достаточно широкое, чтобы вместить все. После этой точки текст больше не помещается, и прокрутка работает до тех пор, пока длина не станет 52.