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? #
cevap
.
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.
Kendi denetiminizi yaparak bunu başarabilirsiniz. İşte kendine bir örnek nasıl çizileceği link
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();
}
}
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ı.
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
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();
}
Kontrol dışarı Kod Projesi bu projeyi - http://www.codeproject.com/KB/edit/numberedtextbox.aspx –
Belki aynı kontrol altına almak gerekir Notepad ++ olarak. Bu Scintilla.Net: http://scintillanet.codeplex.com/ – Oliver