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);
C# RichTextBox 做简单的HTML代码编辑器 ---------利用WinApi修正左侧显示行号 误差相关推荐
- C# RichTextBox 做简单的HTML代码编辑器 ---------左侧显示行号
说明:此显示行号为实际行号,不论是空行还是自动换行,都计算在内,跟实际IDE的行号不同,同步滚动会有半行高度以内的误差. 实现原理,在RichTextBox 编辑器左侧放置另一RichTextBox ...
- C#编程入门第一课 Visual studio 2019使用,cs文件构成,打开项目文件,两句最简单语句,运行前,运行程序,显示行号,设置字体
C#编程入门第一课 文章目录 C#编程入门第一课 1 2 3 Visual Studio 2019 4. cs文件构成 5. 打开项目文件 6. 两句最简单语句 7. 运行前 8.运行程序 9.显示行 ...
- VC++ 单文档的状态栏编程、CEditView类实现编辑器功能、编辑框显示行号列号
Win10 企业版:VC6: 新建一个单文档工程:默认的视图类的基类是CView:选择CEditView类作为,看一下生成的效果: 构建一下:运行:以CEditView作为基类,生成的应用程序具有编辑 ...
- 如何让vim编辑器永久显示行号
在Linux环境下的编辑器有vi.vim.gedit等等.进入这些编辑器之后,为了方便我们需要编辑器显示出当前的行号,可偏偏编辑器默认是不会显示行号的.我们有二种办法可以解决: 第一种是,手动显示:在 ...
- linux vi编译显示行号,Linux编辑器vi、vim、gedit显示行号
在Linux环境下的编辑器有vi.vim.gedit等等.进入这些编辑器之后,为了方便我们需要编辑器显示出当前的行号,可偏偏编辑器默认是不会显示行号的. 我们有二种办法可以解决: 第一种是,手动显示: ...
- [转载] 用Tkinter打造GUI开发工具(45)用Tkinter做自己的中文代码编辑器
参考链接: Python | 使用Tkinter的简单注册表格 用Tkinter打造GUI开发工具(45)用Tkinter做自己的中文代码编辑器 前面我们给了Tkinter接管Python输入和输出的 ...
- 从零开始实现一个简单的低代码编辑器
一.写在前面 低代码编辑器作为一种能够极大地提升开发效率的 PaaS 软件,近些年来一直收到各大公司以及各路投资方的追捧.而对于我们前端开发者来说,编辑器也是为数不多的拥有较深前端技术深度的开发场景. ...
- python中文编辑_python用Tkinter做自己的中文代码编辑器
前面我们给了Tkinter接管Python输入和输出的介绍,我们不难可以想到,能用Tkinter来开发自己的Python代码编辑器.例如可以使用Text控件作代码编辑器. 实际上我在HP_tk2中已经 ...
- linux vi代码高亮,linux Vi编辑器代码高亮设置及永久显示行号的方法
在linux中用vi编辑和修改文件配置中没有彩色显示文件的内容,特别一些关键字不能彩色显示,给我们配置服务过程中造成极大的不方便.[其实主要是vi本身不带颜色的,vim带颜色]下面给出一种解决的方法. ...
最新文章
- Centos5搭建vsftpd服务
- 数字图像处理--几种图像均值滤波的java实现
- dbms_metadata.get_ddl的使用总结
- 课堂作业:返回一个二维整数组中最大子数组的和
- servlet加载资源两种方式-内外(初始化参数).properties文件
- 前端上传数据-按解析顺序
- my.ini修改后服务无法启动_教你发布vue+.netCore项目到服务器
- 自驾游你会经常自己做饭吗?
- SAX与DOM之间的区别 转帖
- 机器学习入门(三):神经网络起手式
- STL中vector介绍
- 3.Magento的布局(Layout),块(Block)和模板(Template)
- 【信息融合】基于BP神经网络和DS 证据理论实现不确定性信息融合问题附matlab代码
- matplotlib中线宽linewidth的默认值是多少?如何查看?如何设置/设定?如何修改?
- 小学语文毕业知识整理与复习题
- 2007最牛X网站收集-From bolm
- python修改列表元素_python 3 基础之列表和列表添加元素、修改元素、查找元素、删除元素、排序、嵌套、取最值...
- 解决Jenkins安装时插件无法下载的问题
- mysql:mysql版本
- window cmd、linux下常用命令
热门文章
- WPF 四种不同效果呼吸灯
- 万字长文,带你彻底理解EF Core5的运行机制,让你成为团队中的EF Core专家
- C#使用iTextSharp操作PDF文件
- 如何看待 70% 的程序员,缺乏数据结构和算法知识?
- 面试官:. NET5源码里用到了哪些设计模式?懵!
- asp.net core监控—引入Prometheus(五)
- 几个超级实用但很少人知道的 VS 技巧[更新]
- 一个有趣的问题, 你知道SqlDataAdapter中的Fill是怎么实现的吗
- 如何在Windows上使用Git创建一个可执行脚本?
- 2019 .NET China Conf:路一直都在,社区会更好