2009-03-18 13 views
11

Je dispose d'un contrôle multiligne richlinebox dans lequel je souhaite intégrer la fonction d'ajout d'un numéro de ligne. J'ai examiné de nombreuses approchesAfficher le numéro de ligne dans la zone de texte enrichi C#

  1. Ajouter une étiquette et mettre à jour les numéros de ligne que le nombre de lignes change
  2. Ajouter un picturebox avec la chaîne tirer dessus.
  3. Ajouter une autre zone de texte et afficher les numéros de ligne
  4. Ajouter une zone de liste et afficher les numéros de ligne.

J'ai eu deux doutes.

  1. La zone de texte enrichi que j'utilise est un contrôle personnalisé et des derieves de la classe RichTextBox. Comment puis-je ajouter plusieurs contrôles à celui-ci.
  2. Quelle est la meilleure approche pour afficher les numéros de ligne pour le texte multiligne en C#
+0

Vous pouvez jeter un oeil à ces articles pour voir comment ils mis en œuvre il: [LINENUMBERS pour RichTextBox] (http://www.codeproject.com/KB/cpp/linenumbers_for_rtb.aspx) [ Numérotation des lignes de RichTextBox dans .NET 2.0] (http://www.codeproject.com/KB/edit/numberedtextbox.aspx) – Stormenet

+0

Voici le blog pour créer des numéros de ligne pour RichTextBox en utilisant C# - [Création de numéros de ligne pour RichTextBox en C#] (http://www.c-sharpcorner.com/blogs/creating-line-numbers-for-richtextbox-in-c-sharp) –

Répondre

3

Mon propre exemple. Tout est bien, mais wordwrap doit être désactivé :(

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

où RTB est mon richtextbox et Tb est textBox à côté de RTB

JT jr

2

ce code m'a aidé à vous remercier, nécessaire pour convertir visuel de base, mais pourrait:

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

TRAVAUX 100% !!! mais vous devez ajouter richTextBox2 pour les numéros de ligne, si vous voulez changer d'autre forme comme listeB bœuf, de toute façon ça m'a bien servi.

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