说明:通过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修正左侧显示行号 误差相关推荐

  1. C# RichTextBox 做简单的HTML代码编辑器 ---------左侧显示行号

    说明:此显示行号为实际行号,不论是空行还是自动换行,都计算在内,跟实际IDE的行号不同,同步滚动会有半行高度以内的误差. 实现原理,在RichTextBox 编辑器左侧放置另一RichTextBox ...

  2. C#编程入门第一课 Visual studio 2019使用,cs文件构成,打开项目文件,两句最简单语句,运行前,运行程序,显示行号,设置字体

    C#编程入门第一课 文章目录 C#编程入门第一课 1 2 3 Visual Studio 2019 4. cs文件构成 5. 打开项目文件 6. 两句最简单语句 7. 运行前 8.运行程序 9.显示行 ...

  3. VC++ 单文档的状态栏编程、CEditView类实现编辑器功能、编辑框显示行号列号

    Win10 企业版:VC6: 新建一个单文档工程:默认的视图类的基类是CView:选择CEditView类作为,看一下生成的效果: 构建一下:运行:以CEditView作为基类,生成的应用程序具有编辑 ...

  4. 如何让vim编辑器永久显示行号

    在Linux环境下的编辑器有vi.vim.gedit等等.进入这些编辑器之后,为了方便我们需要编辑器显示出当前的行号,可偏偏编辑器默认是不会显示行号的.我们有二种办法可以解决: 第一种是,手动显示:在 ...

  5. linux vi编译显示行号,Linux编辑器vi、vim、gedit显示行号

    在Linux环境下的编辑器有vi.vim.gedit等等.进入这些编辑器之后,为了方便我们需要编辑器显示出当前的行号,可偏偏编辑器默认是不会显示行号的. 我们有二种办法可以解决: 第一种是,手动显示: ...

  6. [转载] 用Tkinter打造GUI开发工具(45)用Tkinter做自己的中文代码编辑器

    参考链接: Python | 使用Tkinter的简单注册表格 用Tkinter打造GUI开发工具(45)用Tkinter做自己的中文代码编辑器 前面我们给了Tkinter接管Python输入和输出的 ...

  7. 从零开始实现一个简单的低代码编辑器

    一.写在前面 低代码编辑器作为一种能够极大地提升开发效率的 PaaS 软件,近些年来一直收到各大公司以及各路投资方的追捧.而对于我们前端开发者来说,编辑器也是为数不多的拥有较深前端技术深度的开发场景. ...

  8. python中文编辑_python用Tkinter做自己的中文代码编辑器

    前面我们给了Tkinter接管Python输入和输出的介绍,我们不难可以想到,能用Tkinter来开发自己的Python代码编辑器.例如可以使用Text控件作代码编辑器. 实际上我在HP_tk2中已经 ...

  9. linux vi代码高亮,linux Vi编辑器代码高亮设置及永久显示行号的方法

    在linux中用vi编辑和修改文件配置中没有彩色显示文件的内容,特别一些关键字不能彩色显示,给我们配置服务过程中造成极大的不方便.[其实主要是vi本身不带颜色的,vim带颜色]下面给出一种解决的方法. ...

最新文章

  1. Centos5搭建vsftpd服务
  2. 数字图像处理--几种图像均值滤波的java实现
  3. dbms_metadata.get_ddl的使用总结
  4. 课堂作业:返回一个二维整数组中最大子数组的和
  5. servlet加载资源两种方式-内外(初始化参数).properties文件
  6. 前端上传数据-按解析顺序
  7. my.ini修改后服务无法启动_教你发布vue+.netCore项目到服务器
  8. 自驾游你会经常自己做饭吗?
  9. SAX与DOM之间的区别 转帖
  10. 机器学习入门(三):神经网络起手式
  11. STL中vector介绍
  12. 3.Magento的布局(Layout),块(Block)和模板(Template)
  13. 【信息融合】基于BP神经网络和DS 证据理论实现不确定性信息融合问题附matlab代码
  14. matplotlib中线宽linewidth的默认值是多少?如何查看?如何设置/设定?如何修改?
  15. 小学语文毕业知识整理与复习题
  16. 2007最牛X网站收集-From bolm
  17. python修改列表元素_python 3 基础之列表和列表添加元素、修改元素、查找元素、删除元素、排序、嵌套、取最值...
  18. 解决Jenkins安装时插件无法下载的问题
  19. mysql:mysql版本
  20. window cmd、linux下常用命令

热门文章

  1. WPF 四种不同效果呼吸灯
  2. 万字长文,带你彻底理解EF Core5的运行机制,让你成为团队中的EF Core专家
  3. C#使用iTextSharp操作PDF文件
  4. 如何看待 70% 的程序员,缺乏数据结构和算法知识?
  5. 面试官:. NET5源码里用到了哪些设计模式?懵!
  6. asp.net core监控—引入Prometheus(五)
  7. 几个超级实用但很少人知道的 VS 技巧[更新]
  8. 一个有趣的问题, 你知道SqlDataAdapter中的Fill是怎么实现的吗
  9. 如何在Windows上使用Git创建一个可执行脚本?
  10. 2019 .NET China Conf:路一直都在,社区会更好