2009-03-18 59 views
11

Tôi có một điều khiển richtextbox đa dòng mà tôi muốn tích hợp tính năng thêm số dòng. tôi đã xem xét nhiều cách tiếp cậnhiển thị số dòng trong hộp văn bản có định dạng C#

  1. Thêm nhãn và cập nhật số dòng như đếm dòng thay đổi
  2. Thêm một picturebox cùng với để vẽ chuỗi trên đó.
  3. Thêm hộp văn bản khác cùng với và hiển thị số dòng trên đó
  4. Thêm hộp danh sách cùng và hiển thị số dòng trong đó.

Tôi có hai nghi ngờ.

  1. Hộp richtextbox mà tôi đang sử dụng là điều khiển tùy chỉnh được thực hiện và xuất phát từ lớp RichTextBox. Làm thế nào tôi có thể thêm nhiều điều khiển vào nó.
  2. Cách tiếp cận tốt nhất để hiển thị số dòng cho văn bản nhiều dòng là gì trong C#
+0

Bạn có thể có một cái nhìn tại những bài viết này để xem cách họ thực hiện nó: [LineNumbers cho RichTextBox] (http://www.codeproject.com/KB/cpp/linenumbers_for_rtb.aspx) [ Đánh số dòng RichTextBox trong .NET 2.0] (http://www.codeproject.com/KB/edit/numberedtextbox.aspx) – Stormenet

+0

Đây là Blog để tạo số dòng cho RichTextBox bằng C# - [Tạo số dòng cho RichTextBox trong C#] (http://www.c-sharpcorner.com/blogs/creating-line-numbers-for-richtextbox-in-c-sharp) –

Trả lời

3

Ví dụ của riêng tôi. Tất cả là tốt, nhưng WordWrap phải tắt :(

int maxLC = 1; //maxLineCount - should be public 
    private void rTB_KeyUp(object sender, KeyEventArgs e) 
    { 
     int linecount = rTB.GetLineFromCharIndex(rTB.TextLength) + 1; 
     if (linecount != maxLC) 
     { 
      tB_line.Clear(); 
      for (int i = 1; i < linecount+1; i++) 
      { 
       tB_line.AppendText(Convert.ToString(i) + "\n"); 
      } 
      maxLC = linecount; 
     } 
    } 

nơi RTB là richtextbox tôi và TB là textbox bên cạnh RTB

JT jr

2

mã này giúp tôi cảm ơn bạn, cần thiết để chuyển đổi visual basic nhưng có thể:

Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyUp 
    Dim maxlc As Integer = 1 
    Dim linecount As Integer = TextBox1.GetLineFromCharIndex(TextBox1.Height) + 1 

    If linecount <> maxlc Then 
     TextBox2.Clear() 
     For i = 0 To linecount - 1 Step 1 
      TextBox2.AppendText(Convert.ToString(i) + vbNewLine) 
     Next i 
     maxlc = linecount 
    End If 
End Sub 
1

CÔNG TRÌNH 100% !!! nhưng bạn cần phải thêm richTextBox2 cho số dòng, nếu bạn muốn thay đổi nó thành hình thức khác như listb bò, dù sao nó cũng phục vụ tôi tốt.

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(); 
    } 
Các vấn đề liên quan