3

我在 winforms 4(customRTB1 和 customRTB2)上使用 2 个富文本框。两个 rtb 都有相同的文本。我想要实现的是,当一个 rtb (customRTB1) 向下滚动时,另一个 rtb (customRTB2) 也应该滚动到与 customRTB1 完全相同的位置。我试过这个:

public class CustomRTB : RichTextBox
    {
        #region API Stuff
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int GetScrollPos(IntPtr hWnd, int nBar);

        [DllImport("user32.dll")]
        public static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);

        private const int SB_HORZ = 0x0;
        private const int SB_VERT = 0x1;
        #endregion
        public int HorizontalPosition
        {
            get { return GetScrollPos((IntPtr)this.Handle, SB_HORZ); }
            set { SetScrollPos((IntPtr)this.Handle, SB_HORZ, value, true); }
        }

        public int VerticalPosition
        {
            get { return GetScrollPos((IntPtr)this.Handle, SB_VERT); }
            set { SetScrollPos((IntPtr)this.Handle, SB_VERT, value, true); }
        }
    }

使用 Horizo​​ntalPosition 和 VerticalPosition 我可以移动 SECOND rtb 的滚动条,如下所示:

private void customRTB1_VScroll(object sender, EventArgs e)
{
          customRTB2.VerticalPosition = customRTB1.VerticalPosition;
}

这会将第二个 rtb 的滚动条移动到第一个 rtb 的位置,但是,它根本不会移动文本!那么如何让第二个rtb根据滚动条的位置显示对应的文字呢?主要是,我希望第一个 rtb 发生的每个活动(编辑、滚动等)在第二个 rtb 上重复。我知道我非常接近解决方案。请帮忙。

4

0 回答 0