2010-04-02 16 views
8

Kod vurgulayarak basit bir metin ve komut dosyası düzenleyicisi hazırlıyorum. Bunun için bir RichTextBox kullanıyorum. Ancak VS ya da Notepad ++ gibi satırların sayılarını sol tarafta nasıl göstereceğini bilmiyorum. Herhangi bir çözüm var mı?RichTextBox C'deki bir satırın sayısı nasıl gösterilir? #

+1

Kontrol dışarı Kod Projesi bu projeyi - http://www.codeproject.com/KB/edit/numberedtextbox.aspx –

+0

Belki aynı kontrol altına almak gerekir Notepad ++ olarak. Bu Scintilla.Net: http://scintillanet.codeplex.com/ – Oliver

cevap

16

.

Bu nedenle, satır numaralarını görüntüleyen başka bir RichTextBoxEx oluşturdum.

Hat numaralandırması açık veya kapalı olabilir. Hızlı. Temizce kaydırır. Sayıların rengini, degradenin arka plan renklerini, kenar kalınlığını, yazı tipini, baştaki sıfırları kullanıp kullanmayacağınızı seçebilirsiniz. “Görüntülenen şekilde” veya RTB'deki zorlu satırlara göre sayı çizebilirsiniz.

Örnekler: Bu sınırlamaları vardır

alt text http://i39.tinypic.com/13zcoz6.jpg

alt text http://i43.tinypic.com/wml2z9.jpg

alt text http://i39.tinypic.com/25i4x3o.jpg

: Yalnızca soldaki sayılar görüntüler. Bunu önemsediğinizde çok fazla çaba harcamadan değiştirebilirsiniz.

Bu kod C# projesi olarak tasarlanmıştır. Daha büyük bir "çözüm" (bir XPath Görselleştirme aracı) parçası olsa da, özel RichTextBox ayrılabilir bir montaj olarak paketlenmiştir ve yeni projelerinizde kullanıma hazırdır. Visual Studio'da, DLL'ye bir başvuru ekleyin ve onu tasarım yüzeyine sürükleyip bırakabilirsiniz. Diğer kodu sadece daha büyük bir çözümden kaldırabilirsiniz.

See the code

-1

Kendi denetiminizi yaparak bunu başarabilirsiniz. İşte kendine bir örnek nasıl çizileceği link

0

Her satırı zengin metin kutusuna yayımlamak için yöntemleri olan bir sınıfa depolarım. Bu yöntemde, satır numarasını sınıftaki konumuna göre hazırlayabilirsiniz. Örneğin

(çok kabaca): Başka bir yerde başvurulan codeproject makalelerden kodu yeniden kullanırken, ama baktığı her seçenek, biraz fazla kludgy gibiydi denedik

class myText 
{ 
    public List<string> Lines; 

    public string GetList() 
    { 
     StringBuilder sb = new StringBuilder(); 
     int i = 0; 
     foreach (string s in Lines) 
     { 
      sb.AppendFormat("{0}: {1}", i, s).AppendLine(); 
      i++; 
     } 
     return sb.ToString(); 
    } 
} 
0

Scintilla.Net http://scintillanet.codeplex.com/ ihtiyaçlarınız için en uygun çözüm olabilir. Ancak, projem için Cheeso tarafından önerilen çözümü kullandım (XPath görselleştiricisinden RichTextBoxEx). Çok büyük olmayan belgeler için yeterince basit ve hızlı. İnternet'teki tüm diğer .net bileşenleri inanılmaz derecede yavaştı.

-1

basit yol:

Dim myArray = RichTextBox1.Text.Split() 

Dim cnt As Integer = 0 
RichTextBox1.Clear() 

Do While cnt < myArray.Count 
    RichTextBox1.AppendText(cnt & ":" & myArray(cnt) & vbNewLine) 
    cnt = cnt + 1 
Loop 
0
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(); 
    }