我们在使用到WINFORM窗体工作中,要求RichTextBox 加入行号;

之前有看到大牛们写的,但是太复杂繁多,而且有用双TextBox进行联动,非常不错,今天我们尝试RichTextBox +Panel相互联动如下效果.

左侧灰色为Panel,右侧为RichTextBox 控件

1:准备Panel画布如下代码,当接到文件字符后进行坐标解析,绘制行号。

 private void showLineNo()
{
//获得当前坐标信息
Point p = this.txtFileView.Location;
int crntFirstIndex = this.txtFileView.GetCharIndexFromPosition(p); int crntFirstLine = this.txtFileView.GetLineFromCharIndex(crntFirstIndex); Point crntFirstPos = this.txtFileView.GetPositionFromCharIndex(crntFirstIndex); p.Y += this.txtFileView.Height; int crntLastIndex = this.txtFileView.GetCharIndexFromPosition(p); int crntLastLine = this.txtFileView.GetLineFromCharIndex(crntLastIndex);
Point crntLastPos = this.txtFileView.GetPositionFromCharIndex(crntLastIndex); //准备画图
Graphics g = this.panel2.CreateGraphics(); Font font = new Font(this.txtFileView.Font, this.txtFileView.Font.Style); SolidBrush brush = new SolidBrush(Color.Green); //画图开始 //刷新画布 Rectangle rect = this.panel2.ClientRectangle;
brush.Color = this.panel2.BackColor; g.FillRectangle(brush, , , this.panel2.ClientRectangle.Width, this.panel2.ClientRectangle.Height); brush.Color = Color.White;//重置画笔颜色 //绘制行号 int lineSpace = ; if (crntFirstLine != crntLastLine)
{
lineSpace = (crntLastPos.Y - crntFirstPos.Y) / (crntLastLine - crntFirstLine); } else
{
lineSpace = Convert.ToInt32(this.txtFileView.Font.Size); }
int brushX = this.panel2.ClientRectangle.Width - Convert.ToInt32(font.Size * ); int brushY = crntLastPos.Y + Convert.ToInt32(font.Size * 0.21f);
for (int i = crntLastLine; i >= crntFirstLine; i--)
{ g.DrawString((i + ).ToString(), font, brush, brushX, brushY); brushY -= lineSpace;
} g.Dispose(); font.Dispose(); brush.Dispose();
}

2:事件准备(启用)如下事件

控件加载事件

 private void txtFileView_TextChanged(object sender, EventArgs e)
{
showLineNo();
}

控件滚动事件(当算出的行数大于本控件长度)

 private void txtFileView_VScroll(object sender, EventArgs e)
{
showLineNo();
}

完成后,直接启用运行,Demo事例中的效果就出来,方便大家用于各种应用上.

C# 控件 RichTextBox 显示行号,并且与Panel相互联动的更多相关文章

  1. DEV控件Grid显示行号

    DEV控件Grid的显示行号需要通过一个事件来设置,具体设置代码为: private void gridView1_CustomDrawRowIndicator(object sender, DevE ...

  2. DevExpress GridControl 显示行号、设置行号宽

    显示行号类 /// <summary> /// GridView 显示行号 设置行号列的宽度 /// </summary> /// <param name="g ...

  3. DataGridView显示行号-RowPostPaint

    DataGridView控件在显示数据时,我们有时候需要显示行号,以便检索查看方便使用. 但DataGridView默认没有设置显示行号的属性. 此时我们只要在DataGridView的RowPost ...

  4. GridView 显示行号 设置行号列的宽度

    /// <summary> /// GridView 显示行号 设置行号列的宽度 /// </summary> /// <param name="gv" ...

  5. 终于懂了:FWinControls子控件的显示是由Windows来管理,而不是由Delphi来管理(显示透明会导致计算无效区域的方式有所不同——透明的话应减少剪裁区域,所以要进行仔细计算)

    在研究TCustomControl的显示过程中,怎么样都找不到刷新FWinControls并重新显示的代码: procedure TWinControl.PaintHandler(var Messag ...

  6. 对话框上动态控件的创建、在Picture Control控件上显示图片

    1  MFC对话框之上的动态控件的创建 对话框上的控件是MFC类的一个具体对象. 当在对话框之上使用静态控件时,可以根据类向导来为每个控件添加消息.响应函数以及变量. 当需要在对话框中动态的创建某个控 ...

  7. “此网页上的某个 Web 部件或 Web 表单控件无法显示或导入。找不到该类型,或该类型未注册为安全类型。”

    自从vs装了Resharper,看见提示总是手贱的想去改掉它.于是乎手一抖,把一个 可视web部件的命名空间给改了. 喏,从LibrarySharePoint.WebPart.LibraryAddEd ...

  8. vc6.0如何显示行号以及出现版本不兼容问题

    有时编译时,提示某某行有错,但是要定位到某一行的话,如果在编辑页面能够将行号显示出来,查找也就更方便了,下面我来介绍一下让VC6.0显示行号的方法.   工具/原料   VC6.0.显示行号的插件 方 ...

  9. Row_Number()显示行号

    SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee Row_Number ...

随机推荐

  1. Day 16 软件管理

    1.RPM基本概述 1.什么是rpm? RPM全称 RPM Package Manager 缩写,由红帽开发用于软件包的安装升级卸载与查询 2.如何获取rpm包 在我们刚开始学习rpm包,建议先使用本 ...

  2. 使用T2表中的值替换T1表的值

    描述:现在有两张表,T1由Key和Value两个字段,T2也有Key和Value两个字段 当T1中的Key在T2表中存在时,更新使用T2表中对用的Value 值替换T1中的VAlue update A ...

  3. 编程必备基础知识|计算机组成原理篇(09):CPU的控制器和运算器

    计算机基础方面的知识,对于一些非科班出身的同学来讲,一直是他们心中的痛,而对于科班出身的同学,很多同学在工作之后,也意识到自身所学知识的不足与欠缺,想回头补补基础知识.关于计算机基础的课程很多,内容繁 ...

  4. (1)安装elastic6.1.3及插件kibana,x-pack,essql,head,bigdesk,cerebro,ik

    1.安装环境及程序版本 操作系统: centos6.7 jdk: 1.8.0_102 elastic: 1.6.3 kibana: 1.6.3 x-pack: 1.6.3 es-sql: 1.6.3 ...

  5. Zuhair and Strings-祖海和字符串 CodeForce#1105B

    题目链接:Zuhair and Strings 题目原文 Given a string

  6. Centos安装PhantomJS

    1.下载PhantomJS [root@liuge ~]# wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-l ...

  7. Flask基础(13)-->Flask扩展Flask-Script

    Flask基础(12)-->Flask扩展Flask-Script # 前提是安装了Flask-Script # 联网运行 pip install flask-script from flask ...

  8. CSS div仿table样式

    要想让div元素显示的样式与table相同,那么需要使用display属性,这个属性将告诉浏览器这些数据是制表的,将以哪种样式来渲染数据: // table --使该元素按table样式渲染 // t ...

  9. jQuery三级联动效果代码(省、市、区)

    很长时间都不用jquery了,有人问我jquery写三级联动的插件我就写好了发出来吧,正好需要的人都可以看看. 一.html代码 <!DOCTYPE html> <html> ...

  10. Dropout原理与实现

    Dropout是深度学习中的一种防止过拟合手段,在面试中也经常会被问到,因此有必要搞懂其原理. 1 Dropout的运作方式 在神经网络的训练过程中,对于一次迭代中的某一层神经网络,先随机选择中的一些 ...