Scroll 使用一个备忘录上的滚动编辑也可以滚动另一个备忘录

Scroll 使用一个备忘录上的滚动编辑也可以滚动另一个备忘录,scroll,devexpress,Scroll,Devexpress,我有两个相似的备忘录编辑(为了比较两个记录),我想保持滚动同步以便于比较 我原本以为会有一个OnScroll事件,但没有看到一个,也没有看到任何类似的,我看到的最近的是旋转,这处理了一些可能性,但不是全部 我也没有找到一种方法来导航行 我确实看到了ScrollToCaret方法,但这并不是我想要的 有什么想法吗?这只能通过反射来实现。下面是显示如何同步垂直滚动条位置的代码: using System.Reflection; using DevExpress.XtraEditors; using

我有两个相似的备忘录编辑(为了比较两个记录),我想保持滚动同步以便于比较

我原本以为会有一个OnScroll事件,但没有看到一个,也没有看到任何类似的,我看到的最近的是旋转,这处理了一些可能性,但不是全部

我也没有找到一种方法来导航行

我确实看到了ScrollToCaret方法,但这并不是我想要的


有什么想法吗?

这只能通过反射来实现。下面是显示如何同步垂直滚动条位置的代码:

using System.Reflection;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.ScrollHelpers;

    DevExpress.XtraEditors.ScrollHelpers.ScrollBarEditorsAPIHelper helper1, helper2;

            private void RibbonForm1_Load(object sender, EventArgs e) {
                FieldInfo fi = typeof(MemoEdit).GetField("scrollHelper", BindingFlags.NonPublic | BindingFlags.Instance);
                helper1 = fi.GetValue(memoEdit1) as DevExpress.XtraEditors.ScrollHelpers.ScrollBarEditorsAPIHelper;
                helper2 = fi.GetValue(memoEdit2) as DevExpress.XtraEditors.ScrollHelpers.ScrollBarEditorsAPIHelper;
                helper1.VScroll.ValueChanged += new EventHandler(VScroll_ValueChanged);
                helper2.VScroll.ValueChanged += new EventHandler(VScroll_ValueChanged);
            }

            void VScroll_ValueChanged(object sender, EventArgs e) {
                DevExpress.XtraEditors.VScrollBar scrollBar = sender as DevExpress.XtraEditors.VScrollBar;
                ScrollEventArgs args = new ScrollEventArgs(ScrollEventType.ThumbPosition, scrollBar.Value);
                MemoEdit memo = ((MemoEdit)scrollBar.Parent);
                ScrollBarEditorsAPIHelper helper = helper1;
                if(memo == memoEdit1) 
                    helper = helper2;
                helper.VScroll.Value = scrollBar.Value;
                 MethodInfo mi = typeof(ScrollBarEditorsAPIHelper).GetMethod("UpdateOriginalScroll", BindingFlags.NonPublic | BindingFlags.Instance);
                 mi.Invoke(helper, new object[] { args, false });
            }
如果还希望同步水平滚动条位置,则应订阅HScrollbar.ValueChanged事件。代码应几乎相同,但最后一行除外:

mi.Invoke(helper, new object[] { args, true });