C#實現(xiàn)兩個richtextbox控件滾動條同步滾動的簡單方法
前言
有時候我們需要實現(xiàn)對照文章等,往往將文本放到兩個richtextbox控件中,但是,如果我們需要同步滾動查看,來達到更好的觀看效果。
當然,傳統(tǒng)的方法重載控件或者自定義控件都可以達到目的,但是對于新手或者想僅僅只用一次這個控件的人來說,是非常麻煩的。所以,接下來我來提供一種簡單快捷的方法來實現(xiàn):richtextbox滾動條同步的功能。
方法如下:
首先,我們在winform窗體創(chuàng)建兩個richtextbox控件

下面介紹兩個方法,我經(jīng)常用到
第一個方法,獲得當前鼠標所在richtextbox控件中的行號
private int GetLineNoVscroll(RichTextBox rtb)
{
//獲得當前坐標信息
Point p = rtb.Location;
int crntFirstIndex = rtb.GetCharIndexFromPosition(p);
int crntFirstLine = rtb.GetLineFromCharIndex(crntFirstIndex);
return crntFirstLine;
}
第二個方法,快速轉(zhuǎn)到richtextbox控件中某行
private void TrunRowsId(int iCodeRowsID, RichTextBox rtb)
{
try
{
rtb.SelectionStart = rtb.GetFirstCharIndexFromLine(iCodeRowsID);
rtb.SelectionLength = 0;
rtb.ScrollToCaret();
}
catch
{
}
}
有了這兩個方法,我們就可以實現(xiàn)滾動條同步的功能了。
思路如下:第一,當richtextbox1滾動時,通過GetLineNoVscroll方法,獲得richtextbox1的鼠標對應(yīng)行號。然后
通過TrunRowsId方法,將獲得的richtexbox1的行號定位到richtextbox2中,從而達到richtextbox2跟著richtexbox1
滾動條一起滾動;
在richTextBox1的VScroll事件中添加如下代碼,注意,我這里有個?,代表某個偏移量,可能因為布局原因(如控件大小等)
導致兩個richtextbox不同步,一般寫0就可以了,如果差距過大,自行調(diào)整數(shù)值。
private void richTextBox1_VScroll(object sender, EventArgs e)
{
int crntLastLine= GetLineNoVscroll(richTextBox1, panel1)-?;
TrunRowsId(crntLastLine, richTextBox2);
}
最后,實現(xiàn)了兩個滾動條同步滾動
總結(jié)
好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
C#控制臺程序如何發(fā)布到服務(wù)器Linux上運行
這篇文章主要給大家介紹了關(guān)于C#控制臺程序如何發(fā)布到服務(wù)器Linux上運行的相關(guān)資料,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2021-11-11

