C#超簡單方法實現兩個richtextbox控件滾動條同步滾動


                此文章屬於作者原創,轉載請注明,謝謝

  有時候我們需要實現對照文章等,往往將文本放到兩個richtextbox控件中,但是,如果我們需要同步滾動查看,來達到更好的觀看效果。

當然,傳統的方法重載控件或者自定義控件都可以達到目的,但是對於新手或者想僅僅只用一次這個控件的人來說,是非常麻煩的。所以,接

下來我來提供一種簡單快捷的方法來實現:richtextbox滾動條同步的功能。

首先,我們在winform窗體創建兩個richtextbox控件

下面介紹兩個方法,我經常用到

第一個方法,獲得當前鼠標所在richtextbox控件中的行號

1         private int GetLineNoVscroll(RichTextBox rtb)
2         {
3             //獲得當前坐標信息
4             Point p = rtb.Location;
5             int crntFirstIndex = rtb.GetCharIndexFromPosition(p);
6             int crntFirstLine = rtb.GetLineFromCharIndex(crntFirstIndex);
7             return crntFirstLine;
8         }

第二個方法,快速轉到richtextbox控件中某行

 1   private void TrunRowsId(int iCodeRowsID, RichTextBox rtb)
 2         {
 3             try
 4             {
 5                 rtb.SelectionStart = rtb.GetFirstCharIndexFromLine(iCodeRowsID);
 6                 rtb.SelectionLength = 0;
 7                 rtb.ScrollToCaret();
 8             }
 9             catch
10             {
11 
12             }
13         }

  有了這兩個方法,我們就可以實現滾動條同步的功能了。

  思路如下:第一,當richtextbox1滾動時,通過GetLineNoVscroll方法,獲得richtextbox1的鼠標對應行號。然后

通過TrunRowsId方法,將獲得的richtexbox1的行號定位到richtextbox2中,從而達到richtextbox2跟着richtexbox1

滾動條一起滾動;

  在richTextBox1的VScroll事件中添加如下代碼,注意,我這里有個?,代表某個偏移量,可能因為布局原因(如控件大小等)

導致兩個richtextbox不同步,一般寫0就可以了,如果差距過大,自行調整數值。

1         private void richTextBox1_VScroll(object sender, EventArgs e)
2         {
3            int crntLastLine= GetLineNoVscroll(richTextBox1, panel1)-?;
4             TrunRowsId(crntLastLine, richTextBox2);
5         }

最后,實現了兩個滾動條同步滾動

 

如果大家發現有其他問題,請在下方留言。本人剛開博客不久,大家互相學習,共同成長,謝謝

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM