基本思路:在
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...