Окно "Rich Text" прокручивается вниз, когда к нему записываются новые данные - программирование
Подтвердить что ты не робот

Окно "Rich Text" прокручивается вниз, когда к нему записываются новые данные

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

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

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

4b9b3361

Ответ 1

Да, вы можете использовать метод 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();
}

Ответ 2

RichTextBox будет прокручиваться до конца, если он имеет фокус, и вы используете AppendText для добавления информации. Если вы установите HideSelection на False, он будет сохранять свой выбор, когда он потеряет фокус и будет автоматически прокручиваться.

Я разработал GUI Log Viewer, который использовал метод ниже. Он использовал до полного ядро. Избавьтесь от этого кода и установив HideSelection в False, получив процессор до 1-2%

//Don't use this!
richTextBox.AppendText(text);  
richTextBox.ScrollToEnd();

Ответ 3

    [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);

с помощью вышеуказанного метода вы можете прокрутить текстовое поле вниз

Ответ 4

Я сделаю это просто:

  • Установите HideSelection свойства HideSelection значение false

  • Используйте AppendText() для добавления текста в RichTextBox.

Код:

RichTextBox rtbTest;

void InitRichTextBox()
{
    //Init rtbTest...

    rtbTest.HideSelection = false;//Hide selection so that AppendText will auto scroll to the end
}

void AddText(string txt)
{
    rtbTest.AppendText(txt);
}

Ответ 5

При записи новых данных, если вы используете AppendText(), он не будет прокручиваться вверх и будет всегда оставаться внизу.

Ответ 6

Залить un défilement progressif par exampleple →

namespace SongTabs
    {
        public class RichTextBoxAutoScroll
        {
            protected int LineJump { get; set; }
            protected int ActualLine = 1;
            Timer Timer { get; set; }
            RichTextBox RichTextBox { get; set; }
            public RichTextBoxAutoScroll(RichTextBox rtb,int speed,int linejump)
            {
                this.LineJump = linejump;
                this.RichTextBox = rtb;
                this.Timer = new Timer();
                this.Timer.Interval = speed;
                this.Timer.Tick += Timer_Tick;
            }

            void Timer_Tick(object sender, EventArgs e)
            {
                RichTextBox.SelectionStart = RichTextBox.GetFirstCharIndexFromLine(ActualLine);
                RichTextBox.ScrollToCaret();
                ActualLine += LineJump;
            }
            public void Start()
            {
                Timer.Start();
            }
        }
    }

Ответ 7

Это старый вопрос, но у меня была эта проблема, и я использовал событие richTextBox_TextChanged, как указано выше, которое работает. Но я считаю, что это обходное решение и хочет документировать фактическое решение, если кто-то еще его ищет.

Если вы добавите его, будет автоматически прокручиваться, однако RichTextBox должен быть сфокусирован. Поэтому вызовите Focus до AppendText, чтобы убедиться, что он автоматически прокручивается.

richTextBox.Focus();

richTextBox.AppendText(text);