Когда вы набираете 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) выделяется весь текст и текстовое поле очищается. Если весь текст не выделен, его сложнее и я с этим не справился.