Как написать несколько ключевых символов в текстовом поле, которые выбраны все? - PullRequest
1 голос
/ 05 июня 2019

В приложении Windows Forms я хочу выделить весь текст в текстовом поле с помощью txtBox.SelectAll () в качестве кода для текстового поля, но после его отладки я могу набрать только ОДНУ букву в выбранном текстовом поле , Письмо постоянно меняется, когда я печатаю. Как мне написать более одной выбранной буквы?

    private void TextBox1_TextChanged(object sender, EventArgs e)
    {
        txtBox.SelectAll();
    }

1 Ответ

0 голосов
/ 05 июня 2019

Когда вы набираете txtBox.SelectAll() в своем коде, весь текст выделяется. Затем при вводе другого символа стандартное (и ожидаемое) поведение заключается в перезаписи выделения, поэтому в итоге вы получаете только новый символ.

Вы можете переопределить это поведение с помощью этого кода ( см. Примечание ниже ):

// Backup field for textBox1.Text
string _textBox1TextBkp = "";

private void textBox1_TextChanged(object sender, EventArgs e)
{
    // Add the new characters to backup field
    _textBox1TextBkp += textBox1.Text;

    // If textBox1.Text is empty:
    if(textBox1.Text == "")
    {
        if (_textBox1TextBkp.Length > 0)
        {
            // Option 1: Remove last character
            _textBox1TextBkp = _textBox1TextBkp.Remove(_textBox1TextBkp.Length - 1);

            // Option 2: Delete all text - clear backup field
            //_textBox1TextBkp = "";
        }
    }

    // Set textBox1.Text to the backup field if needed
    if (_textBox1TextBkp != textBox1.Text)
    {
        // Remove TextChanged event before modifying the text.
        // This avoid stack-overflow by triggering the event when still inside.
        textBox1.TextChanged -= textBox1_TextChanged;

        // Set textBox1.Text to the backup field
        textBox1.Text = _textBox1TextBkp;

        // Add the removed event
        textBox1.TextChanged += textBox1_TextChanged;
    }

    // Call SelectAll
    textBox1.SelectAll();
}

при удалении символа (Backspace) у вас есть два варианта в этом коде:

Вариант 1: удалить последний символ.

Вариант 2: удалить весь текст.

Примечание: код предполагает, что при удалении символа (Backspace) выделяется весь текст и текстовое поле очищается. Если весь текст не выделен, его сложнее и я с этим не справился.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...