using System.Drawing;
using System.Windows.Forms;
public class LineNumberRichTextBox : UserControl
{
private RichTextBox richTextBox;
private RichTextBox lineNumbers;
public LineNumberRichTextBox()
{
richTextBox = new RichTextBox();
richTextBox.BorderStyle = BorderStyle.None;
richTextBox.Dock = DockStyle.Fill;
richTextBox.TextChanged += RichTextBox_TextChanged;
lineNumbers = new RichTextBox();
lineNumbers.BorderStyle = BorderStyle.None;
lineNumbers.Dock = DockStyle.Left;
lineNumbers.ReadOnly = true;
lineNumbers.ScrollBars = RichTextBoxScrollBars.None;
lineNumbers.TabStop = false;
lineNumbers.Width = GetWidth();
Controls.Add(richTextBox);
Controls.Add(lineNumbers);
}
private void RichTextBox_TextChanged(object sender, EventArgs e)
{
lineNumbers.Text = GetLineNumbers();
}
private string GetLineNumbers()
{
int lines = richTextBox.Lines.Length;
StringBuilder builder = new StringBuilder();
for (int i = 1; i <= lines; i++)
{
builder.AppendLine(i.ToString());
}
return builder.ToString();
}
private int GetWidth()
{
int digits = richTextBox.Lines.Length.ToString().Length;
return digits * 10 + 20;
}
public override string Text
{
get { return richTextBox.Text; }
set { richTextBox.Text = value; }
}
public RichTextBox RichTextBox
{
get { return richTextBox; }
}
public RichTextBox LineNumbers
{
get { return lineNumbers; }
}
}