Изменить положение полосы прокрутки в TextBox? - PullRequest
5 голосов
/ 21 декабря 2010

Если я хочу изменить положение полосы прокрутки TextBox, что мне нужно сделать, кроме этого:

SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);

Эта функция только изменяет положение полосы прокрутки, но не обновляет фактическое значение TextBox (поэтому полоса прокрутки «прокручивается», а текст - нет). Какие-либо предложения? Я использую Windows Forms и .NET 4 с Visual Studio 2008.

Ответы [ 3 ]

6 голосов
/ 21 декабря 2010

Я обычно делаю:

textBox1.Select(textBox1.Text.Length, 0);
textBox1.ScrollToCaret();

Если при выборе 0 символов курсор просто перемещается в нужное место (в примере кода: в конце текста).

4 голосов
/ 21 декабря 2010

Сначала определите постоянное значение:

const int EM_LINESCROLL = 0x00B6;

Затем объявите два внешних метода: user32.dll :

[DllImport("user32.dll")]
static extern int SetScrollPos(IntPtr hWnd, int nBar, 
                               int nPos, bool bRedraw);
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, int wMsg, 
                               int wParam, int lParam);

Наконец, используйте эти методычтобы сделать реальную вещь:

SetScrollPos(myTextBox.Handle,1,myTextBox.Lines.Length-1,true);
SendMessage(myTextBox.Handle,EM_LINESCROLL,0,
                             myTextBox.Lines.Length-1);

Вы также можете использовать GetScrollPos () для сохранения позиции прокрутки при обновлении текстового поля:

[DllImport("user32.dll")]
static extern int GetScrollPos(IntPtr hWnd, int nBar);
2 голосов
/ 21 декабря 2010

Старайтесь не контролировать это напрямую, это просто не очень хорошо работает.Установите свойство TextBox.SelectionStart, чтобы убедиться, что каретка является линией, которую вы хотите сделать видимой.Затем вызовите ScrollToCaret.Контроль должен иметь фокус, чтобы сделать эту работу.У вашего пользователя не возникнет проблем с его поиском.

TextBox - это обертка для прадедушки элементов управления, ему уже 23 года, он старше, чем многие пользователи SO, на мой взгляд.Назад, когда 640 КБ было достаточно для всех, и Window 2.0 должен был работать на 386SUX или меньше.Версия WPF имеет больше свистков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...