Поле форматированного текста прокрутите вниз, когда в него будут записаны новые данные
моя программа вызывает Java, а затем перенаправляет stdout на RichTextBox. Моя проблема заключается в том, что вертикальная полоса прокрутки всегда остается в верхней части окна каждый раз, когда данные записываются.
даже если вы прокрутите вниз, как только новые данные будут записаны, они перейдут наверх. Я бы хотел наоборот.
поэтому, когда новые данные записываются, он остается внизу. Как я могу это сделать?
5 ответов:
Да, вы можете использовать
ScrollToCaret()способ:// bind this method to its TextChanged event handler: // richTextBox.TextChanged += richTextBox_TextChanged; private void richTextBox_TextChanged(object sender, EventArgs e) { // set the current caret position to the end richTextBox.SelectionStart = richTextBox.Text.Length; // scroll it automatically richTextBox.ScrollToCaret(); }
RichTextBox будет прокручиваться до конца, если он имеет фокус, и вы используете AppendText для добавления информации. Если вы установите HideSelection в False, он сохранит свой выбор, когда он потеряет фокус и останется автоматически прокручиваемым.
Я разработал графический интерфейс просмотра журнала, который использовал метод ниже. Оно использовало до полного ядра держа вверх. Избавившись от этого кода и установив HideSelection в False, вы получили загрузку процессора до 1-2%
//Don't use this! richTextBox.AppendText(text); richTextBox.ScrollToEnd();
[DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern IntPtr SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam); private const int WM_VSCROLL = 277; private const int SB_PAGEBOTTOM = 7; internal static void ScrollToBottom(RichTextBox richTextBox) { SendMessage(richTextBox.Handle, WM_VSCROLL, (IntPtr)SB_PAGEBOTTOM, IntPtr.Zero); richTextBox.SelectionStart = richTextBox.Text.Length; }ScrollToBottom(richTextBox);
С помощью вышеуказанного метода вы можете прокрутить поле форматированного текста в нижней части
Это старый вопрос, но у меня была эта проблема, и я использовал
richTextBox_TextChangedсобытие, как указано выше, которое работает. Но я чувствую, что это обходной путь и хотел бы документировать фактическое решение в случае, если кто-то еще ищет его.если вы добавите его будет автоматически прокручивать, однако
RichTextBoxдолжен быть сфокусирован. Так что звонитеFocusдоAppendTextчтобы убедиться, что он автоматически прокручивается.richTextBox.Focus(); richTextBox.AppendText(text);
при записи новых данных, если вы используете
AppendText()Он не будет прокручиваться вверх и всегда будет оставаться внизу.
Comments