以上是设计时的效果图,
下面是运行时效果图:
控件实现的主要功能:
序号 | 描述 |
1 | 自动计算行高绘制序号(回车,输入,粘贴,鼠标移动,键盘移动都没有问题) |
2 | 绘制序号外围的边框 |
3 | 可以随着光标移动的当前行标志.(图片中的粉色矩形,当然也可以设置为图标.) |
4 | 双击每行序号前的部分可以实现类似设置"断点"符号的功能.(例如,上图中的第2行和第6行) |
5 | 序号右侧的绿色(虚线)分割线. |
6 | 顶部的标尺(只提供类似WORD的点击标尺后,在RICHTEXTBOX中绘制对应位置的虚线.) |
最近做了一些控件,这个带行号有标尺的RICHTEXTBOX是其中之一.由于一些原因,这里只谈一下设计思路,控件本身由几个部分组成,一为一个继承了Richtextbox的控件(Jcsrtx),该控件主要实现了返回当前工作区看到的第一行字符的行号VisibleIndex,光标所在行的CursorIndex,在一系列的ON 前缀textchange,resize,mousedown,mousehover,vscroll方法中引发一公共事件EventTriger,二为一个布局在左侧的Pictruebox控件(Leftpix),在复合控件中对让EventTriger事件来响应Leftpix的Invalidate();来达到及时刷新行号的目的,在Leftpix的PAINT中来绘制Jcsrtx的从VisibleIndex到ClientRangle的所有行的行号.计算时高度采用每2行的POINT.Y的差,这样当因为字号不同时也不会影响效果.
部分源代码:
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/0196c3df5ea9e936f21e9932cca91014.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/1327ab569c1ae82736693a50b8e33378.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/7ff8d92cded7e0ce15e7ca1acc870052.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)