2009-03-18 14 views
11

Posiadam formant richtextbox Multiline, w którym chcę zintegrować funkcję dodawania numeru wiersza. Rozważałam wiele podejśćWyświetlanie numeru wiersza w polu tekstowym C#

  1. Dodaj etykietę i aktualizowanie numery wierszy jako liczby linii zmienia
  2. Dodaj PictureBox wraz z narysować łańcuch na nim.
  3. Dodaj kolejny pole tekstowe wraz z numerami linii i pokaż na nim numery linii
  4. Dodaj listbox wzdłuż i wyświetl numery linii w nim.

Mam dwie wątpliwości.

  1. Kontener richtextbox, którego używam, jest formantem wykonanym na zamówienie i pobiera z klasy RichTextBox. Jak mogę dodać do niego wiele elementów sterujących.
  2. Co jest najlepszym rozwiązaniem, aby wyświetlić numery linii dla tekstu wielowierszowego wC#
+0

Można również zapoznać się z tymi artykułami, aby zobaczyć, w jaki sposób realizowane go: [numery linii dla RichTextBox] (http://www.codeproject.com/KB/cpp/linenumbers_for_rtb.aspx) [ Linie numerowania RichTextBox w .NET 2.0] (http://www.codeproject.com/KB/edit/numberedtextbox.aspx) – Stormenet

+0

Oto Blog do tworzenia numerów linii dla RichTextBox za pomocą C# - [Tworzenie numerów linii dla RichTextBox w C#] (http://www.c-sharpcorner.com/blogs/creating-line-numbers-for-richtextbox-in-c-sharp) –

Odpowiedz

3

własnym przykładzie. Wszystko jest w porządku, ale musi być wyłączona wordwrap :(

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; 
     } 
    } 

gdzie RTB jest moim RichTextBox i TB jest tekstowym obok RTB

JT jr

2

ten kod pomógł mi dziękuję, potrzebnej do przekształcenia visual basic, ale może:

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

działa w 100% !!! ale trzeba dodać richTextBox2 dla numerów linii, jeśli chcesz go zmienić na inny postaci jak listb wo, w każdym razie dobrze mi to służyło.

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(); 
    } 
Powiązane problemy