Поле форматированного текста прокрутите вниз, когда в него будут записаны новые данные



моя программа вызывает Java, а затем перенаправляет stdout на RichTextBox. Моя проблема заключается в том, что вертикальная полоса прокрутки всегда остается в верхней части окна каждый раз, когда данные записываются.



даже если вы прокрутите вниз, как только новые данные будут записаны, они перейдут наверх. Я бы хотел наоборот.



поэтому, когда новые данные записываются, он остается внизу. Как я могу это сделать?

633   5  

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

    Ничего не найдено.