在RTF文本框中显示行号c#

问题描述 投票:11回答:5

我有一个多行Richtextbox控件,我想在其中集成添加行号的功能。我考虑了很多方法

  1. 添加标签并随着行数的变化更新行号
  2. 添加图片框并在其上绘制字符串。
  3. [添加另一个文本框并在其上显示行号
  4. 添加列表框并在其中显示行号。

我有两个疑问。

  1. 我正在使用的richtextbox是自定义控件,并从RichTextBox类中获取。如何向其中添加多个控件。
  2. 在c#中显示多行文本的行号的最佳方法是什么?>

我有一个多行Richtextbox控件,我想在其中集成添加行号的功能。我考虑了许多方法添加标签并更新行号作为行...

c# textbox multiline line-numbers
5个回答
3
投票

我自己的例子。一切都很好,但是必须禁用自动换行:(


2
投票

此代码帮助我谢谢您,需要转换Visual Basic,但可以:


1
投票

作品100%!!!但是,如果要将行号更改为其他,则需要添加richTextBox2作为行号像列表框这样的表格,无论如何它对我来说都很有用。

    private void richTextBox1_keyDown(object sender, KeyEventArgs e)
    {

        for (int i = 0; i <= richTextBox1.Lines.Count(); i++)
        {
            if (!(e.KeyCode == Keys.Back))
            {
                if (!richTextBox2.Text.Contains(i.ToString()))
                {
                    richTextBox2.Text += i.ToString() + "\n";
                }
            }
            else
            {
                richTextBox2.Clear();
            }
        }    
    } 

1
投票
    public int getWidth()
    {
        int w = 25;
        // get total lines of richTextBox1
        int line = richTextBox1.Lines.Length;

        if (line <= 99)
        {
            w = 20 + (int)richTextBox1.Font.Size;
        }
        else if (line <= 999)
        {
            w = 30 + (int)richTextBox1.Font.Size;
        }
        else
        {
            w = 50 + (int)richTextBox1.Font.Size;
        }

        return w;
    }

    public void AddLineNumbers()
    {
        // create & set Point pt to (0,0)
        Point pt = new Point(0, 0);
        // get First Index & First Line from richTextBox1
        int First_Index = richTextBox1.GetCharIndexFromPosition(pt);
        int First_Line = richTextBox1.GetLineFromCharIndex(First_Index);
        // set X & Y coordinates of Point pt to ClientRectangle Width & Height respectively
        pt.X = ClientRectangle.Width;
        pt.Y = ClientRectangle.Height;
        // get Last Index & Last Line from richTextBox1
        int Last_Index = richTextBox1.GetCharIndexFromPosition(pt);
        int Last_Line = richTextBox1.GetLineFromCharIndex(Last_Index);
        // set Center alignment to LineNumberTextBox
        LineNumberTextBox.SelectionAlignment = HorizontalAlignment.Center;
        // set LineNumberTextBox text to null & width to getWidth() function value
        LineNumberTextBox.Text = "";
        LineNumberTextBox.Width = getWidth();
        // now add each line number to LineNumberTextBox upto last line
        for (int i = First_Line; i <= Last_Line + 2; i++)
        {
            LineNumberTextBox.Text += i + 1 + "\n";
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        LineNumberTextBox.Font = richTextBox1.Font;
        richTextBox1.Select();
        AddLineNumbers();
    }

    private void richTextBox1_SelectionChanged(object sender, EventArgs e)
    {
        Point pt = richTextBox1.GetPositionFromCharIndex(richTextBox1.SelectionStart);
        if (pt.X == 1)
        {
            AddLineNumbers();
        }
    }

    private void richTextBox1_VScroll(object sender, EventArgs e)
    {
        LineNumberTextBox.Text = "";
        AddLineNumbers();
        LineNumberTextBox.Invalidate();
    }

    private void richTextBox1_TextChanged(object sender, EventArgs e)
    {
        if (richTextBox1.Text == "")
        {
            AddLineNumbers();
        }
    }

    private void richTextBox1_FontChanged(object sender, EventArgs e)
    {
        LineNumberTextBox.Font = richTextBox1.Font;
        richTextBox1.Select();
        AddLineNumbers();
    }

    private void LineNumberTextBox_MouseDown(object sender, MouseEventArgs e)
    {
        richTextBox1.Select();
        LineNumberTextBox.DeselectAll();
    }

    private void Form1_Resize(object sender, EventArgs e)
    {
        AddLineNumbers();
    }

0
投票

您的代码运行良好,但只写1,2和3

© www.soinside.com 2019 - 2024. All rights reserved.