zoukankan      html  css  js  c++  java
  • C# 控件 RichTextBox 显示行号,而且与Panel彼此联动

      咱们在利用到WINFORM窗体工作中,要求RichTextBox 参加行号;

      之前有看到大牛们写的,可是太杂乱繁复,而且有效双TextBox举办联动,非常不错,本日咱们实行RichTextBox +Panel相互联动如下效果.

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

      1:预备Panel画布如下代码,当接到文件字符后举办坐标分析,制作行号。

      1 private void showLineNo()
      2 {
      3 //获恰当时坐标信息
      4 Point p = this.txtFileView.Location;
      5 int crntFirstIndex = this.txtFileView.GetCharIndexFromPosition(p);
      6
      7 int crntFirstLine = this.txtFileView.GetLineFromCharIndex(crntFirstIndex);
      8
      9 Point crntFirstPos = this.txtFileView.GetPositionFromCharIndex(crntFirstIndex);
      10
      11 p.Y += this.txtFileView.Height;
      12
      13 int crntLastIndex = this.txtFileView.GetCharIndexFromPosition(p);
      14
      15 int crntLastLine = this.txtFileView.GetLineFromCharIndex(crntLastIndex);
      16 Point crntLastPos = this.txtFileView.GetPositionFromCharIndex(crntLastIndex);
      17
      18 //预备绘图
      19 Graphics g = this.panel2.CreateGraphics();
      20
      21 Font font = new Font(this.txtFileView.Font, this.txtFileView.Font.Style);
      22
      23 SolidBrush brush = new SolidBrush(Color.Green);
      24
      25 //绘图开端
      26
      27 //改造画布
      28
      29 Rectangle rect = this.panel2.ClientRectangle;
      30 brush.Color = this.panel2.BackColor;
      31
      32 g.FillRectangle(brush, 0, 0, this.panel2.ClientRectangle.Width, this.panel2.ClientRectangle.Height);
      33
      34 brush.Color = Color.White;//重置画笔颜色
      35
      36 //制作行号
      37
      38 int lineSpace = 0;
      39
      40 if (crntFirstLine != crntLastLine)
      41 {
      42 lineSpace = (crntLastPos.Y - crntFirstPos.Y) / (crntLastLine - crntFirstLine);
      43
      44 }
      45
      46 else
      47 {
      48 lineSpace = Convert.ToInt32(this.txtFileView.Font.Size);
      49
      50 }
      51 int brushX = this.panel2.ClientRectangle.Width - Convert.ToInt32(font.Size * 3);
      52
      53 int brushY = crntLastPos.Y + Convert.ToInt32(font.Size * 0.21f);
      54 for (int i = crntLastLine; i >= crntFirstLine; i--)
      55 {
      56
      57 g.DrawString((i + 1).ToString(), font, brush, brushX, brushY);
      58
      59 brushY -= lineSpace;
      60 }
      61
      62 g.Dispose();
      63
      64 font.Dispose();
      65
      66 brush.Dispose();
      67 }
      View Code
      2:事端预备(启用)如下事端
      控件加载事端
      1 private void txtFileView_TextChanged(object sender, EventArgs e)
      2 {
      3 showLineNo();
      4 }
      View Code
      控件滚动事端(当算出的行数大于本控件长度)
      1 private void txtFileView_VScroll(object sender, EventArgs e)
      2 {
      3 showLineNo();
      4 }
      View Code
      完成后,直接启用运行,Demo案例中的效果就出来,方便各人用于各种应用上.

  • 相关阅读:
    数据结构--链表基础练习题
    LeetCode 10.28每日一题1207. 独一无二的出现次数【简单】
    数据结构--链表
    LeetCode 10.25每日一题845. 数组中的最长山脉【中等】
    LeetCode 10.22每日一题763. 划分字母区间【中等】
    解决map热点与uni-app中map标签冲突的问题。(Vue Render函数应用)
    【Codeforces 1329A】Dreamoon Likes Coloring
    【Codeforces Alpha Round #20 C】Dijkstra?
    【 Educational Codeforces Round 93 (Rated for Div. 2) D】Colored Rectangles
    【Codeforces Round #643 (Div. 2) C】Count Triangles
  • 原文地址:https://www.cnblogs.com/hite/p/12691789.html
Copyright © 2011-2022 走看看