Проблема, как вы уже догадались, заключается в том, что вы запускаете этот код для каждого события изменения текста, которое будет происходить для того, чтобы текст был добавлен или удален.Это также происходит, если цвет текста изменяется!
Я бы посоветовал вам взглянуть более прозаично.
Вам действительно нужно проверять System.Environment.Newline
символов и даже тогда, только когда текстдобавляется программно, например, копировать, вставлять, открывать файл и т. д. В противном случае вы можете проверить наличие события нажатия клавиши, чтобы определить, была ли нажата клавиша возврата или ввода (так как они вставляют символы новой строки в текст).
Если номера строк не отображаютсяне требуется в самом файле кода и предназначены только для редактирования, тогда я бы предложил создать новое текстовое окно только для чтения на боковой стороне окна редактора.Свяжите их вместе в позиции прокрутки, используя «событие новой строки», и автоматически добавьте номера строк при добавлении новой строки.Затем вы можете легко сохранить отредактированный код, не удаляя номера строк.
В качестве альтернативы, сделайте так, чтобы нумерация строк занимала первые 4 символа каждой строки (как пример) с кодом, начинающимся с позиции7. Опять же, рассчитывайте номер строки только тогда, когда происходит событие новой строки, автоматически добавляя номер строки и следующие 3 пробела.