首頁  >  文章  >  後端開發  >  C#中如何實作兩個richtextbox控制項滾動條同步滾動的方法詳解

C#中如何實作兩個richtextbox控制項滾動條同步滾動的方法詳解

黄舟
黄舟原創
2017-05-21 10:45:402365瀏覽

這篇文章主要為大家介紹了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);
     }

最後,實作了兩個捲軸同步捲動

總結

以上是C#中如何實作兩個richtextbox控制項滾動條同步滾動的方法詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn