Я делаю простой текстовый редактор и редактор скриптов с подсветкой кода. Для этого я использую RichTextBox. Но я не знаю, как заставить его показывать номера строк слева, как в VS или Notepad ++. Есть какое-нибудь решение?
Как показать номер строки в RichTextBox C #
Ответы (5)
Я попытался повторно использовать код из статей codeproject, на которые есть ссылки в другом месте, но каждый вариант, на который я смотрел, казался слишком неуклюжим.
Итак, я построил еще один RichTextBoxEx, который отображает номера строк.
Нумерацию строк можно включить или выключить. Это быстро. Прокручивается чисто. Вы можете выбрать цвет чисел, цвет фона для градиента, толщину границы, шрифт, использовать ли ведущие нули. Вы можете нумеровать строки «как отображается» или в соответствии с жесткими символами новой строки в RTB.
Примеры:
У него есть ограничения: цифры отображаются только слева. Вы могли бы изменить это без особых усилий, если бы вам было не все равно.
Код выполнен в виде проекта C #. Хотя это часть более крупного «решения» (инструмента визуализации XPath), настраиваемый RichTextBox упакован как отделяемая сборка и готов к использованию в ваших новых проектах. В Visual Studio просто добавьте ссылку на DLL, и вы можете перетащить ее на поверхность разработки. Вы можете просто отбросить другой код из более крупного решения.
Я бы сохранил каждую строку в классе, у которого есть методы для публикации в richtextbox. В этом методе вы можете добавить номер строки в зависимости от ее положения в классе.
Например (очень примерно):
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/ может быть наиболее подходящим решением для ваших нужд. Но для своего проекта я использовал решение, предложенное Cheeso (RichTextBoxEx из визуализатора XPath). Это просто и достаточно быстро для небольших документов. Все остальные компоненты .net из Интернета были невероятно медленными.
Самый простой способ:
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
Вы можете добиться этого, нарисовав свой собственный элемент управления. Вот пример того, как нарисовать себе ссылку а>


