this.richTextBox1.VScroll += new System.EventHandler(this.richTextBox1_VScroll);
this.richTextBox2.VScroll += new System.EventHandler(this.richTextBox1_VScroll);
[DllImport("user32.dll")]
static extern int SendMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam);
const int EM_GETFIRSTVISIBLELINE = 0x00CE;
const int EM_LINESCROLL = 0x00B6;
private void richTextBox1_VScroll(object sender, EventArgs e)
{
int linenum1 = SendMessage(this.richTextBox1.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
int linenum2 = SendMessage(this.richTextBox2.Handle, EM_GETFIRSTVISIBLELINE, 0, 0);
int lines = linenum1 - linenum2;
IntPtr Hrtb = this.richTextBox2.Handle;
if(this.richTextBox2.Focused)
{
lines = - lines;
Hrtb = this.richTextBox1.Handle;
}
SendMessage(Hrtb, EM_LINESCROLL, 0, lines);
}
You will need to know some p/invoke knowledge:
http://msdn.microsoft.com/en-us/magazine/cc164123.aspx
SendMessage Function
http://msdn.microsoft.com/en-us/library/ms644950(VS.85).aspx
EM_GETFIRSTVISIBLELINE Message
http://msdn.microsoft.com/en-us/library/bb761574(VS.85).aspx
EM_LINESCROLL Message
http://msdn.microsoft.com/en-us/library/bb761615(v=VS.85).aspx
此idea来自处理一个客户的windows Form的项目需求,有兴趣的朋友可阅读下需求:
http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/fafa0d7d-fbd4-42ac-8cde-2d434ef567ab
PS:我的同事开发了一个MSDN论坛的小工具,有兴趣的朋友可以试试,此工具已开始在国内推行: