C#两个richTextBox同步滚动

来源:互联网 发布:软件开发项目介绍 编辑:程序博客网 时间:2024/04/28 15:35
using System;using System.Collections.Generic;using System.Text;using System.Windows.Forms;using System.Runtime.InteropServices;namespace SolveQuestion{    class RichTextBoxEx : RichTextBox    {        [DllImport("user32.dll")]        public static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);        public RichTextBoxEx()        {        }        public const int WM_HSCROLL = 276;        public const int WM_VSCROLL = 277;        public const int WM_SETCURSOR = 32;        public const int WM_MOUSEWHEEL = 522;        public const int WM_MOUSEMOVE = 512;        public const int WM_MOUSELEAVE = 675;        public const int WM_MOUSELAST = 521;        public const int WM_MOUSEHOVER = 673;        public const int WM_MOUSEFIRST = 512;        public const int WM_MOUSEACTIVATE = 33;        private RichTextBox otherRichTextBox;        public RichTextBox OtherRichTextBox        {            get { return otherRichTextBox; }            set { otherRichTextBox = value; }        }        protected override void WndProc(ref Message m)        {            if ((otherRichTextBox != null) &&                (m.Msg == WM_HSCROLL ||                m.Msg == WM_VSCROLL ||                m.Msg == WM_SETCURSOR ||                m.Msg == WM_MOUSEWHEEL ||                m.Msg == WM_MOUSEMOVE ||                m.Msg == WM_MOUSELEAVE ||                m.Msg == WM_MOUSELAST ||                m.Msg == WM_MOUSEHOVER ||                m.Msg == WM_MOUSEFIRST ||                m.Msg == WM_MOUSEACTIVATE))            {                SendMessage(otherRichTextBox.Handle, m.Msg, m.WParam, m.LParam);            }            base.WndProc(ref m);        }    }}调用方法        private void Form1_Load(object sender, EventArgs e)        {            richTextBoxEx1.OtherRichTextBox = richTextBoxEx2;        }

 原理是:重写RichTextBox截获它的滚动条消息和鼠标消息发送给另一个RichTextBox