源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#实现两个richtextbox控件滚动条同步滚动的简单方法

  • 时间:2022-06-20 19:13 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#实现两个richtextbox控件滚动条同步滚动的简单方法
[b]前言[/b] 有时候我们需要实现对照文章等,往往将文本放到两个richtextbox控件中,但是,如果我们需要同步滚动查看,来达到更好的观看效果。 当然,传统的方法重载控件或者自定义控件都可以达到目的,但是对于新手或者想仅仅只用一次这个控件的人来说,是非常麻烦的。所以,接下来我来提供一种简单快捷的方法来实现:richtextbox滚动条同步的功能。 [b]方法如下:[/b] 首先,我们在winform窗体创建两个richtextbox控件 [img]http://files.jb51.net/file_images/article/201705/2017520144337124.png?2017420144347[/img] [b]下面介绍两个方法,我经常用到[/b] 第一个方法,获得当前鼠标所在richtextbox控件中的行号
private int GetLineNoVscroll(RichTextBox rtb)
    {
      //获得当前坐标信息
      Point p = rtb.Location;
      int crntFirstIndex = rtb.GetCharIndexFromPosition(p);
      int crntFirstLine = rtb.GetLineFromCharIndex(crntFirstIndex);
      return crntFirstLine;
    }
第二个方法,快速转到richtextbox控件中某行
private void TrunRowsId(int iCodeRowsID, RichTextBox rtb)
    {
      try
      {
        rtb.SelectionStart = rtb.GetFirstCharIndexFromLine(iCodeRowsID);
        rtb.SelectionLength = 0;
        rtb.ScrollToCaret();
      }
      catch
      {

      }
    }
有了这两个方法,我们就可以实现滚动条同步的功能了。 思路如下:第一,当richtextbox1滚动时,通过GetLineNoVscroll方法,获得richtextbox1的鼠标对应行号。然后 通过TrunRowsId方法,将获得的richtexbox1的行号定位到richtextbox2中,从而达到richtextbox2跟着richtexbox1 滚动条一起滚动; 在richTextBox1的VScroll事件中添加如下代码,注意,我这里有个?,代表某个偏移量,可能因为布局原因(如控件大小等) 导致两个richtextbox不同步,一般写0就可以了,如果差距过大,自行调整数值。
     private void richTextBox1_VScroll(object sender, EventArgs e)
     {
      int crntLastLine= GetLineNoVscroll(richTextBox1, panel1)-?;
       TrunRowsId(crntLastLine, richTextBox2);
     }
最后,实现了两个滚动条同步滚动 [b]总结[/b] 好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对编程素材网的支持。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部