C# RichTextBox 做簡單的HTML代碼編輯器 ---------利用WinApi修正左側顯示行號 誤差

?

說明:通過WinApi可以準確定準滾動位置。

//行號 生成顯示  這里rtbLineNum用的 RichTextBox,也可以用其它private void ShowLineNum(){rtbLineNum.Text = "";//計算行高,行數int linesLength = 0;var pFirst = tbEditor.GetPositionFromCharIndex(0);var pEnd = tbEditor.GetPositionFromCharIndex(tbEditor.Text.Length);if (pEnd.Y > pFirst.Y){var pSecondLine = tbEditor.GetPositionFromCharIndex(tbEditor.GetFirstCharIndexFromLine(1));var lineHeight = pSecondLine.Y - pFirst.Y;linesLength = (pEnd.Y - pFirst.Y) / lineHeight;}else{linesLength = 1;}//生成行數for (var i = 0; i < linesLength; i++){rtbLineNum.AppendText(i + 1 + "\n");}//行號右對齊rtbLineNum.SelectAll();rtbLineNum.SelectionAlignment = HorizontalAlignment.Right;}//上次滾動位置 行private int _scrollToLine = 0;//同步滾動private void SyncSrollLocation(){           //利用winApi 同步滾動條位置var pos = GetScrollPos(tbEditor.Handle, SB_VERT);SetScrollPos(rtbLineNum.Handle, SB_VERT, pos, true);PostMessage(rtbLineNum.Handle, WM_VSCROLL, SB_THUMBPOSITION + 0x10000 * pos, 0);}//編輯器 Resize事件private void tbEditor_Resize(object sender, EventArgs e){ShowLineNum();SyncSrollLocation();}//編輯器 TextChanged事件private void tbEditor_TextChanged(object sender, EventArgs e){ShowLineNum();SyncSrollLocation();}//編輯器 VScroll事件private void tbEditor_VScroll(object sender, EventArgs e){SyncSrollLocation();}private const int SB_VERT = 0x1;private const int WM_VSCROLL = 0x115;private const int SB_THUMBPOSITION = 4;[DllImport("user32.dll")]private static extern int SetScrollPos(IntPtr hwnd, int nBar, int nPos, bool bRedraw);[DllImport("user32.dll")]private static extern int GetScrollPos(IntPtr hwnd, int nBar);[DllImport("user32.dll")]private static extern bool PostMessage(IntPtr hWnd, int nBar, int wParam, int lParam);

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/286247.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286247.shtml
英文地址,請注明出處:http://en.pswp.cn/news/286247.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Angular - - angular.element

angular.element 將DOM元素或者HTML字符串一包裝成一個jQuery元素。 格式&#xff1a;angular.element(element); element&#xff1a;包裝成jquery對象的html字符串或者dom元素 jqLite提供的方法&#xff1a; addClass()after()append()attr()bind() – 不支持命名空間,選擇器…

六、文章詳情顯示及點贊實現《iVX低代碼/無代碼個人博客制作》

注&#xff1a;iVX也有免費直播課《第八期直播課》 一、文章詳情實現 上一節我們已經完成了首頁的內容顯示&#xff0c;那么此時我們完成點擊后跳轉到詳情頁內容。 那么此時由于我們需要跳轉到詳情頁需要對應的數據ID&#xff0c;那么此時還需要給首頁的文章數據對象數組一個…

centos格式化xfs文件系統格式并設置自動啟動掛載磁盤

文章目錄 說明操作步驟 說明 非全方位資料&#xff0c;學習實踐而來&#xff0c;歡迎參考學習 操作步驟 要將 /dev/sdb1 分區快速格式化為 XFS 文件系統并設置開機自動掛載&#xff0c;可以按照以下步驟進行操作&#xff1a; 查看已連接的硬盤列表&#xff0c;主要是設備名稱…

System.CommandLine選項Option

前一篇簡單看了一下CommandLine命令的使用&#xff0c;其實在一個命令行工具中&#xff0c;還有一個重要的點&#xff0c;那就是選項——Option&#xff0c;選項是為命提供參數&#xff0c;就好像C#中方法&#xff0c;Command就像方法&#xff0c;Option就像方法的參數&#xf…

長尾關鍵詞如何優化

長尾關鍵詞流量占據全站流量的80%&#xff0c;這是根據御梵景觀后臺數據得出來的結論&#xff0c;千萬不要以為泛關鍵詞給網站帶來的流量大&#xff0c;打個比方花園設計一天帶100個 流量&#xff0c;但是花園設計案例帶10個&#xff0c;花園設計效果圖帶10個&#xff0c;花園設…

【ArcGIS風暴】ArcGIS10.6柵格計算器(Raster Calculator)用法詳解

擴展閱讀: 【ArcGIS風暴】ArcGIS 10.2柵格計算器實用公式大全(經典珍藏版) 【ArcGIS風暴】柵格計算器(Raster Calculator)運算出現錯誤問題及解決方案匯總 文章目錄 1. 柵格計算器簡介2. 柵格計算器用法3. 簡單算術運算4. 數學函數運算5. 空間分析函數運算1. 柵格計算器簡…

C語言試題二十九之編寫函數int function(int lim,int aa[max])求出小于或等于lim的所有素數并放在aa數組中,該函數返回所求的素數的個數。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 編寫函數i…

三、登錄頁制作《iVX低代碼/無代碼個人博客制作》

注&#xff1a;iVX也有免費直播課《第八期直播課》 一、登錄頁實現 本節需要做的登錄頁如下&#xff1a; 該頁面我們復習可以的值&#xff0c;首先設置整個頁面頁面的垂直和水平對其為居中&#xff0c;隨后一個容器包裹對應的登錄區域&#xff0c;此時我們創建一個頁面命名為…

Android ContentProvider支持跨進程數據共享與互斥、同步 雜談

在開發中&#xff0c;假如&#xff0c;A、B進程有部分信息需要同步&#xff0c;這個時候怎么處理呢&#xff1f;設想這么一個場景&#xff0c;有個業務復雜的Activity非常占用內存&#xff0c;并引發OOM&#xff0c;所以&#xff0c;想要把這個Activity放到單獨進程&#xff0c…

【C#控件詳解】對話框類控件(打開文件,保存文件,選擇字體和顏色)

在實際應用中,我們會用到各種各樣的對話框,如打開文件,保存文件,選擇字體和顏色等等。本文詳細講解C#中的顏色對話框、打開文件對話框、字體對話框、瀏覽文件夾對話框和保存文件對話框。 文章目錄 1. ColorDialog對話框2. FolderBrowserDialog對話框3. FontDialog對話框4. …

動物界的再生一個故事

豬月薪5千&#xff0c;打算用20萬建一個窩&#xff0c;老虎不允許&#xff0c;說私自建就是違章建筑&#xff0c;只允許向狼買。 狼是搞工程的&#xff0c;先用20萬賄賂老虎取得開發權&#xff0c;再用50萬元向老虎買這塊地&#xff0c; 花10萬元把豬圈蓋好&#xff0c;向豬要價…

C語言試題三十之請編寫函數function對長度位7個字符的字符串,除首尾字符外,將其余5個字符按ascii碼降序排列。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫函數…

基于.NetCore開發博客項目 StarBlog - (11) 實現訪問統計

系列文章基于.NetCore開發博客項目 StarBlog - (1) 為什么需要自己寫一個博客&#xff1f;基于.NetCore開發博客項目 StarBlog - (2) 環境準備和創建項目基于.NetCore開發博客項目 StarBlog - (3) 模型設計基于.NetCore開發博客項目 StarBlog - (4) markdown博客批量導入基于.N…

【SPSS統計分析】SPSS19.0簡體中文版安裝教程(附SPSS19.0簡體中文版下載)

spss19.0中文版是一款專業數據統計軟件,受到各種社會學科的研究生、研究員的歡迎。軟件能夠對信息的采集、處理、分析進行全面評估和預測。spss19.0中文版新增加了廣義線性混合模型、自動線性模型、一個統計網頁入口portal和直復營銷direct marketing功能等。另外,IBM 針對SP…

Java 比較兩個版本號的大小 (通用)

/*** 版本號比較** param v1* param v2* return 0代表相等&#xff0c;1代表左邊大&#xff0c;-1代表右邊大* Utils.compareVersion("1.0.358_20180820090554","1.0.358_20180820090553")1*/public static int compareVersion(String v1, String v2) {if …

四、登錄注冊頁功能實現《iVX低代碼/無代碼個人博客制作》

注&#xff1a;iVX也有免費直播課《第八期直播課》 首先打開在線編輯器進入我們的項目&#xff1a;https://editor.ivx.cn/ 一、登錄頁功能實現 上一節中已經完成了登錄頁的頁面制作&#xff0c;那么這一節就開始對應的完成登錄頁的功能實現。 登錄頁的功能實現主要是對用戶…

Oracle 12c應用連接VIP輪訓負載均衡?

目前很多生產數據庫都是兩節點RAC&#xff0c;應用連接的數據庫通常會連接SCAN IP或者VIP,這里做一個小實驗&#xff0c;如果我們使用VIP連接&#xff0c; 應該怎樣配置我們的客戶端&#xff0c;負載均衡是否是嚴格意義上的輪訓機制&#xff0c;只有通過自己的測試才能得到準備…

C語言試題三十一之判斷字符串是否為回文?若是則函數返回1,主函數中輸出yes,否則返回0,主函數中輸出no。回文是指順讀和倒讀都是一樣的字符串。

??個人主頁:個人主頁 ??系列專欄:C語言試題200例目錄 ??推薦一款刷算法、筆試、面經、拿大公司offer神器 ?? 點擊跳轉進入網站 ?作者簡介:大家好,我是碼莎拉蒂,CSDN博客專家(全站排名Top 50),阿里云博客專家、51CTO博客專家、華為云享專家 1、題目 請編寫函數…

關于html5

html5 是用來 將 js 和 css 結合起來 從而實現 各種功能 javascript 用來定義 html5 頁面的邏輯 css 來定義 html5 中的顯示樣式

【SignalR全套系列】之在.Net6中實現SignalR分組通信

微信公眾號&#xff1a;趣編程ACE關注可了解更多的.NET日常實戰開發技巧&#xff0c;如需源碼 請公眾號后臺留言 源碼;[如果覺得本公眾號對您有幫助&#xff0c;歡迎關注]前文回顧【SignalR全套系列】之在.Net6中實SignalR通信SignalR中給客戶端分組調用演示服務端代碼實現1.Pr…