我在winforms 4上使用2个富文本框(customRTB1和customRTB2)。 两个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); }
}
}
使用HorizontalPosition和VerticalPosition我可以按如下方式移动SECOND rtb的滚动条:
private void customRTB1_VScroll(object sender, EventArgs e)
{
customRTB2.VerticalPosition = customRTB1.VerticalPosition;
}
这会将第二个rtb的滚动条移动到第一个rtb的位置,但是,它根本不会移动文本! 那么如何根据滚动条的位置使第二个rtb显示相应的文本呢? 主要是,我希望第一个rtb的每个活动发生(编辑,滚动等)在第二个rtb上重复。 我知道我非常接近解决方案。 请帮忙。