c 寫帶行號的richTextBox

2021-05-24 23:53:22 字數 1894 閱讀 8992

基本思路:

usercontrol

元件中分別放乙個

panel

和richtextbox

,兩者均高度相等,無

border

,且頂端對齊,完全填充

usercontrol

的client介面

計算得到

richtextbox

的當前顯示文字的開始行座標

crntfirstposk

開始行號

crntfistline

,開始字元索引號

crntfirstindex

和最末行座標

crntlastpos

,最末行號

crntlastline

,最末行字元索引號

crntlastindex

,計算得到行距,然後在

panel1

上繪製行號,注意:

panel1

與richtextbox

的座標有些許偏差,通過驗證得到之間的偏差(偏差見**),保證

1~2000

之間常規字型

9~30

之間偏差在允許範圍之內(自己驗證除錯)

將showlineno

方法放在

panel1

的paint

方法內,當

panel

一重新整理就繪製行號(相當於重寫

paint

方法),

當richtextbox

的文字變化和垂直滾動時呼叫

panel

的invalidate()

方法(不要呼叫

paint

,會出現閃爍)

怎樣解決richtextbox出現滾動後,新行號覆蓋在就行號上,出現塗鴉的問題?

不要呼叫

panel

的refresh()

方法,這樣放進

panel

的paint

中後,會出現無限重繪的閃爍,因為

refresh

方法會呼叫

paint

方法強制重繪,用該提取

panel

的背景色,用背景色覆蓋原來的行號,這裡用到

g.fillrectangle方法

**如下:(我會上傳原解決方案資料夾到csdn,大家互相討論下最優方法)

private void showlineno()

else

int brushx = this.panel1.clientrectangle.width - convert.toint32(font.size * 3);

int brushy = crntlastpos.y+ convert.toint32(font.size*0.21f);//

驚人的演算法啊!!

for (int i = crntlastline; i >= crntfirstline;i-- )

g.dispose();

font.dispose();

brush.dispose(); }

以上方法為繪製行號的方法,將其放在

panel

的paint

方法中

當richtextbox

的文字變化和垂直滾動時呼叫

panel

的invalidate()

方法(不要呼叫

paint

,會出現閃爍)

《C語言及程式設計》實踐參考 帶行號顯示檔案

返回 賀老師課程教學鏈結 專案2 帶行號顯示檔案 1 設計乙個程式,讀取命令列中給出的檔案,將其內容在螢幕上顯示出來,並在其行首顯示行號 行號從1開始 參考解答 include include int main int argc,char ar if in fopen ar 1 r null row...

C 實現帶寫時拷貝功能的String類

字串寫時拷貝實現原理 通過物件的引用計數來減少記憶體的申請開銷,經過拷貝構造或賦值函式得到的所有物件,在還沒有對其中某個某個物件進行修改操作時,都共享乙個物件的記憶體。否則,如果原有物件的引用計數大於1時,將會為修改的物件分配新的記憶體,並在原有的物件引用計數中減一。成員變數是字元指標型別,字串前四...

用TableView寫帶特效的cell

用tableview寫帶特效的cell 效果 分析 在uiscrollview中的 中傳送廣播,然後在cell中接收廣播 對每乙個cell進行設定 對開發有利的一種小細節 核心原始碼 控制器原始碼 tableview created by xianmingyou on 15 4 9.import v...