Как добавить номера строк в начало каждой строки в многострочном текстовом поле при каждом нажатии клавиши «ВВОД»? - PullRequest
0 голосов
/ 12 июня 2018

я прошел через это, но они не помогли мне в моей ситуации

это не работает в моем случае, потому что он содержит методы KeyData или KeyCode в ответах, которые показывают ошибку при попытке запустить, Как добавить число в каждой новой строке в многострочном текстовом поле C # / ASP.net

Я пробовал этот вариант, который не работает в моем случае, потому что он используется при нажатии кнопки Добавление новой строки данных в TextBox

. Эта строка просто добавляет несколько строк, таких как первая, вторая, третья, и это не помогает в моем случае.https://www.codeproject.com/Questions/320713/Adding-new-line-in-textbox-without-repalcing-exist

Я просмотрел 20 результатов поиска в Google, многие из них не были актуальны, другие не помогли в моей ситуации.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Я попытался ответить по соображениям, это не сработало точно так, как я хотел.

Сначала событие KeyDown не дало никаких результатов, похоже, что при нажатии клавиши Enter событие KeyDown не 'т и не дает никаких результатов.поэтому вместо этого я использовал событие PreviewKeyDown, которое работает.

Во-вторых, оно не записывало номер строки для первой строки.Также для последующих чисел он создает число в новой строке, а затем перемещает курсор на другую строку, чтобы эффект был следующим:

некоторый текст

2

некоторый текст

3

некоторый текст

и так далее.

результат, который я хочу получить, я хочу, чтобы он был таким:

1-некоторый текст.

2-некоторый текст.

3-некоторыйtext.

, поэтому я изменил код, предоставленный Computhos, который дал мне правильные результаты.Вот код, который я использовал:

После создания TextBox в xaml и создания события PreviewKeyDown, как это

  <TextBox  PreviewKeyDown="LifeGoalsTextBox_PreviewKeyDown" x:Name="LifeGoalsTextBox" TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" />

Я пошел к коду и написал этот код:

private void LifeGoalsTextBox_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
        {
            if (e.Key == Key.Enter)
            {
                string txt = LifeGoalsTextBox.Text;
                int lineNumber = txt.Split('\n').Length ;
                string lineNumberString = lineNumber.ToString();

                if (lineNumber == 0)
                {
                    LifeGoalsTextBox.Text = LifeGoalsTextBox.Text.Insert(0, "1") + '-';
                }
                else
                {
                    lineNumber++;
                    int lastLine = 1 + LifeGoalsTextBox.Text.LastIndexOf('\n');
                    LifeGoalsTextBox.Text = LifeGoalsTextBox.Text.Insert(lastLine, lineNumberString+ '-') ;

                    LifeGoalsTextBox.CaretIndex = LifeGoalsTextBox.Text.Length;
                }
            }
        }
0 голосов
/ 12 июня 2018

Если я хорошо понимаю вопрос, вы хотите добавить номер строки каждой новой строки внутри текстового поля.Для того, чтобы сделать это, вам нужно добавить TextBox в ваше представление с событием KeyDown

<TextBox KeyDown="TextBox_KeyDown" x:Name="txtBox" />

Затем в коде позади представления вы можете проверить наличиенажмите клавишу «Ввод» и добавьте номер строки к тексту

private void TextBox_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        string txt = txtBox.Text;
        int lineNumber = txt.Split('\n').Length + 1;
        txtBox.Text += '\n' + lineNumber.ToString();
        txtBox.CaretIndex = txtBox.Text.Length;
    }
}

Примечания

  • Строка txtBox.CaretIndex = txtBox.Text.Length; устанавливает курсор наконец текста после его редактирования.В противном случае, когда вы нажимаете ввод, каретка сбрасывается в начало текста.
  • Вам нужно будет добавить номер первой строки, когда текстовое поле пусто.
  • Возможно, вам придется обработатьредактирование, т. е. чтобы пользователь не мог удалить номера строк, например.

Редактировать

При использовании свойства AcceptsReturn TextBoxсобытие KeyDown напрямую обрабатывается TextBox и записывается родителям.В этом случае вам нужно использовать событие PreviewKeyDown, см. Стратегии маршрутизации MSDN

...