Авто-прокрутка вниз в RichTextBox

Добавляется текст в конец файла и содержимое файла выводится в richTextBox. Как сделать авто-прокрутку, чтобы отображались последние добавленные данные?

code: #csharp
public class MyForm:.... {
        .......
        protected delegate void LogMessageDelegate(string message);
        private const int WM_VSCROLL = 0x115;
        private const int SB_BOTTOM = 7; 
        protected struct POINTAPI
        {
            public int x;
                public int y;
        }
 
        [DllImport( "user32.dll", EntryPoint="SendMessageA")]
        private static extern int ExternSendMessage(IntPtr handle, int msg, int wParam, int lParam);
        private void ScrollToEnd(IntPtr handle) {
            ExternSendMessage(handle, WM_VSCROLL, SB_BOTTOM, 0);
        }
        private void LogMessage(string message) {
            if (!this.InvokeRequired) {
                LogTextBox.AppendText(message);
                try {
                    if (!LogTextBox.Focused) {
                        ScrollToEnd(LogTextBox.Handle);
                    }
                } catch {}
            } else {
                this.BeginInvoke(new LogMessageDelegate(this.LogMessage), new object[] {message});
            }
        }
    }

Можно использовать метод Select(int, int) класса TextBoxBase (родителя RichTextBox и TextBox), передавая первым параметром индекс символа, перед которым нужно установить курсор, а вторым передавать 0. Но, чтобы метод сработал, control должен иметь фокус перед вызовом Select. Например, при клике на кнопку нужно перевести фокус на позицию символа с индексом 5:

code: #csharp
textBox.Focus();
textBox.Select(5, 0);
textBox.ScrollToCaret();

автор: mik-a-el

Поделиться:

Похожие статьи: