У меня есть 2 текстовых поля в моей форме, одно для содержимого (mainTextBox
), которое находится справа, а другое для номеров строк (linesTextBox
), которое находится слева. Оба поля имеют одинаковую высоту и оба являются многострочными текстовыми полями.
Каждый раз, когда текст изменяется в mainTextBox
, я вызываю метод writeLineNumbers(mainTextBox.Lines.Count())
, который запускает цикл for для заполнения linesTextBox
. Это выглядит так:
private void mainTextBox_TextChanged(object sender, EventArgs e)
{
int linecount = mainTextBox.Lines.Count();
writeLineNumbers(linecount);
}
private void writeLineNumbers(int linecount)
{
linesTextBox.Text = "";
int i = 1;
foreach (var lines in mainTextBox.Lines)
{
linesTextBox.AppendText(i + "\n");
i++;
}
}
Это работает, однако это чрезвычайно утомительно и замедляет работу системы, как только вы проходите около 50 строк. Я пробовал несколько других вещей, но я не могу найти способ сделать это.
Я пробовал этот способ, но он очень глючный и часто ломается, но я думаю, что я на правильном пути.
private void writeLineNumbers(int count)
{
int lineBoxCount = linesTextBox.Lines.Count();
int mainBoxCount = count;
if (lineBoxCount != mainBoxCount && lineBoxCount > mainBoxCount)
{
while (lineBoxCount > mainBoxCount)
{
linesTextBox.Text = linesTextBox.Text.Remove(linesTextBox.Text.LastIndexOf(Environment.NewLine));
lineBoxCount--;
}
}
else if (lineBoxCount != mainBoxCount && lineBoxCount < mainBoxCount)
{
while (lineBoxCount < mainBoxCount)
{
linesTextBox.AppendText(count + "\n");
lineBoxCount++;
}
}
}