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

前言

有时候我们需要实现对照文章等,往往将文本放到两个richtextbox控件中,但是,如果我们需要同步滚动查看,来达到更好的观看效果。

当然,传统的方法重载控件或者自定义控件都可以达到目的,但是对于新手或者想仅仅只用一次这个控件的人来说,是非常麻烦的。所以,接下来我来提供一种简单快捷的方法来实现:richtextbox滚动条同步的功能。

方法如下:

首先,我们在winform窗体创建两个richtextbox控件

下面介绍两个方法,我经常用到

第一个方法,获得当前鼠标所在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);
     }

最后,实现了两个滚动条同步滚动

总结

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • C#中richtextbox使用方法详解

    C#中RichTextBox使用方法和TextBox基本一样,只不过RichText除了TXT外,还支持RTF格式的文档.本文详细介绍RichTextBox的使用方法供大家参考,具体如下: 一.RichTextBox的使用方法 RichTextBox.Find方法 RichTextBox控件不仅允许输入和编辑文本,同时还提供了标准 TextBox 控件未具有的.更高级的指定格式的许多功能. 语法:RichTextBox 说明: RichTextBox 提供了一些属性,对于本控件文本的任何部分,用

  • C# RichTextBox制作文本编辑器

    本文利用一个简单的小例子[文本编辑器],讲解RichTextBox的用法. Windows窗体中的RichTextBox控件用于显示,输入和操作格式化的文本,RichTextBox除了拥有TextBox控件的所有功能外,还可以显示字体,颜色,链接,从文件中读取和加载图像,以及查找指定的字符.RichTextBox控件通常用于提供类似字体处理程序(如Microsoft Word)的文本操作和显示功能.RichTextBox控件可以显示滚动条,且默认根据需要进行显示. 涉及知识点: Selectio

  • C#在RichTextBox中显示不同颜色文字的方法

    本文实例讲述了C#在RichTextBox中显示不同颜色文字的方法.分享给大家供大家参考.具体实现方法如下: #region 日志记录.支持其他线程访问 public delegate void LogAppendDelegate(Color color, string text); /// <summary> /// 追加显示文本 /// </summary> /// <param name="color">文本颜色</param> /

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

    前言 有时候我们需要实现对照文章等,往往将文本放到两个richtextbox控件中,但是,如果我们需要同步滚动查看,来达到更好的观看效果. 当然,传统的方法重载控件或者自定义控件都可以达到目的,但是对于新手或者想仅仅只用一次这个控件的人来说,是非常麻烦的.所以,接下来我来提供一种简单快捷的方法来实现:richtextbox滚动条同步的功能. 方法如下: 首先,我们在winform窗体创建两个richtextbox控件 下面介绍两个方法,我经常用到 第一个方法,获得当前鼠标所在richtextbo

  • Qt图形图像开发之QT滚动区控件(滚动条)QScrollArea的详细方法用法图解与实例

    QT滚动区控件(滚动条控件)QScrollArea简介 滚动区域控件QScrollArea用于显示一个画面中的子部件的内容.如果部件超过画面的大小,视图可以提供滚动条,这样就可以看到部件的整个区域. QScrollArea属于控件容器类,可以直接在ui中拖出来. 对于QScrollArea,最难搞懂的就是:如何控制它,才能让它在我们想要出现滚动条的时候出现滚动条. 我们拖入一个QScrollArea,再向他里面拖入4个button,观察信息如下: 可以发现,4个button并不是直接位于QScr

  • Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解

    本文实例讲述了Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法.分享给大家供大家参考,具体如下: 相关内容: tkinter的使用 1.模块的导入 2.使用 3.控件介绍 Tk Button Label Frame Toplevel Menu Menubutton Canvas Entry Message Text Listbox Checkbutton Radiobutton Scale Scrollbar 首发时间:2018-03-04 16:39 Python的GU

  • DropDownList控件绑定数据源的三种方法

    本文给大家分享web  中 DropDownList绑定数据源的几种方式,先给大家分享三种常见的方式,具体详情如下所示:  第一种 this.ddltype.DataTextField = "btName";//显示的值 this.ddltype.DataValueField = "btId";//获取dropdownlist中的值 ddltype.DataSource = service.GetBusinessTypeAll(""); this

  • C# 实现拖拉控件改变位置与大小的方法

    前言: 很多时候我们需要在运行时,动态地改变控件的位置以及大小,以获得更好的布局.比如说实际项目中的可自定义的报表.可自定义的单据等诸如此类.它们有个特点就是允许客户或者二次开发人员设计它们需要的界面设置功能. 本人以前也做过可自定义系统,包括界面和功能,主要为了减少开发人员的工作量以及程序的灵活性和健壮性. 本篇主要讨论下,在运行时如何实现拖拉控件,达到改变控件位置与大小.功能将模拟VS设计界面时的拖拉功能. (本篇暂不涉及多控件同时操作) 一.技术概述 其实实现运行时控件的拖拉并不难,主要是

  • JavaFx UI控件与代码间的绑定方法

    JavaFx初探一,UI控件的使用,具体内容如下 方式一:使用纯代码直接new view控件,这样就不涉及到与fxml文件之间的交互了 方式二:使用fxml编写界面文件,用可视化工具scene builder 来构建交互界面. 分两种方式绑定控件,可以用Android的方法在java中直接调用类似findviewbyId的方法,先在xml文件中设置fxid,然后根据id去找这个控件,代码如下 @Override public void start(Stage primaryStage) thro

  • PyQt5高级界面控件之QTableWidget的具体使用方法

    前言 QTableWidget是Qt程序中常用的显示数据表格的控件,类似于c#中的DataGrid.QTableWidget是QTableView的子类,它使用标准的数据模型,并且其单元数据是通过QTableWidgetItem对象来实现的,使用QTableWidget时就需要QTableWidgetItem.用来表示表格中的一个单元格,整个表格就是用各个单元格构建起来的 QTableWidget类中的常用方法 方法 描述 setROwCount(int row) 设置QTableWidget表

  • Qt控件点击消息获取的方法详解

    目录 1.QPushButton响应鼠标点击消息 1.1自身响应消息clicked 1.2事件过滤器响应消息 1.3mousePressEvent事件获取 2.QLabel响应鼠标点击消息 2.1事件过滤器响应消息 2.2mousePressEvent事件获取 今日为大家分享一个小功能实现:如何获取控件点击响应. 在这里,我以两个最简单并且具有代表性的控件来进行功能讲解. 举例控件:QLabel.QPushButton 对于这两个控件大家应该都不会陌生了,做界面开发经常会用到的. 开发环境:VS

  • EXTJS内使用ACTIVEX控件引起崩溃问题的解决方法

    问题 在本人目前的项目中,前端部分完全使用EXTJS基于"One-Page"理念搭建.除了一个HTML作为基本容器外,就全是JS文件了(页面是由JS文件实现的).当用户切换页面时候,我们通过析构上一个页面对象,然后创建新页面对象并展现在HTML中.基于这种架构,我们还引入了一个ActiveX控件,用于展现报表.这一引入,问题就出来了:只要是访问有报表控件存在的页面,用户切换2次页面,IE就会崩溃(FF无此问题),百试不爽. 原因 因为系统设计时考虑到了资源释放,专门处理过析构部分,而且

  • Linkbutton控件在项目中的简单应用

    Linkbutton控件在项目中的简单应用 我们知道,在web控件中有一组用于表单提交和回传的控件,即Button控件.这类控件用于将带有用户输入值的页面提交给服务器,以便用页面中的代码对这些值进行处理.它会在服务器上产生一个Click事件,供用户在代码中使用. Button控件可分为button控件.LinkButton控件.ImageButton控件三类.它们都用于提交页面.其中ImageButton控件可以显示为一幅图像,并且能够提供用户单击位置的坐标位置.而LinkButton控件则在页

随机推荐