Disabling RichTextBox autoscroll

后端 未结 2 1250
逝去的感伤
逝去的感伤 2020-12-18 06:49

I am using RichTextBox control for displaying application logs. I am updating control once a second with a few calls of RichTextBox::AppendText method. What is really annoyi

2条回答
  •  别那么骄傲
    2020-12-18 07:14

    If your issue is with the "Vertical Scroll" scrolling down when you are adding the Log text, but you would want it to be on top all the time:

    you have to add event handlers to VScroll, TextChanged events and in the event handler set the scroll to top

    richTextBox1.VScroll += HandleRichTextBoxAdjustScroll;
    richTextBox1.TextChanged += HandleRichTextBoxAdjustScroll;
    
    private const UInt32 SB_TOP = 0x6;
    private const UInt32 WM_VSCROLL = 0x115;
    
    [return: MarshalAs(UnmanagedType.Bool)]
    [DllImport("user32.dll", SetLastError = true)]
    private static extern bool PostMessage(IntPtr hWnd, UInt32 Msg,
        IntPtr wParam, IntPtr lParam);
    
    private void HandleRichTextBoxAdjustScroll(Object sender,
        EventArgs e)
    {
        PostMessage(handle, WM_VSCROLL, (IntPtr)SB_TOP, IntPtr.Zero);
    }
    

    You could do the same with horizontal scroll bar too. Replace WM_VSCROLL with WM_HSCROLL and SB_TOP with SB_LEFT

    private const UInt32 WM_HSCROLL = 0x0114;
    private const UInt32 SB_LEFT = 0x06;
    

提交回复
热议问题