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

下面介紹兩個方法,我經(jīng)常用到
第一個方法,獲得當(dāng)前鼠標(biāo)所在richtextbox控件中的行號
private int GetLineNoVscroll(RichTextBox rtb)
{
//獲得當(dāng)前坐標(biāo)信息
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)滾動條同步的功能了。
思路如下:第一,當(dāng)richtextbox1滾動時,通過GetLineNoVscroll方法,獲得richtextbox1的鼠標(biāo)對應(yīng)行號。然后
通過TrunRowsId方法,將獲得的richtexbox1的行號定位到richtextbox2中,從而達(dá)到richtextbox2跟著richtexbox1
滾動條一起滾動;
在richTextBox1的VScroll事件中添加如下代碼,注意,我這里有個?,代表某個偏移量,可能因為布局原因(如控件大小等)
導(dǎo)致兩個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)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
C# 中的 is 真的是越來越強(qiáng)大越來越語義化(推薦)
這篇文章主要介紹了C# 中的 is 真的是越來越強(qiáng)大越來越語義化,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09
C#控制臺程序如何發(fā)布到服務(wù)器Linux上運行
這篇文章主要給大家介紹了關(guān)于C#控制臺程序如何發(fā)布到服務(wù)器Linux上運行的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-11-11
C#簡易人機(jī)對抗“石頭剪刀布”游戲的實現(xiàn)
本文主要介紹了C#簡易人機(jī)對抗“石頭剪刀布”游戲的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05

