C#

C#: Как переопределить поведение клавиши del с удаления справа на удаление всего текста в textboxе?

Напишите команду для этого, не могу найти.
Допустим, что у вас на форме есть текстовое поле textBox1, в которое вы хотите вводить вещественные числа (положительные и отрицательные) с плавающей запятой (точкой). Если пользователь хочет удалить последний введённый символ, то он это может сделать нажав на клавишу Backspace, а если хочет удалить всё содержимое текстового поля, то нажимает клавишу Delete.

Для этого вам нужно подписать поле textBox1 на два события: KeyPress и KeyDown, в результате вы получите два обработчика, которые будут содержать следующий код:

using System.Globalization; // Добавьте пространство имён

// Позволит использовать клавиши Delete И Backspace
private void textBox1_KeyDown(object sender, KeyEventArgs e) {
if (e.KeyCode == Keys.Delete) textBox1.Clear();
if (e.KeyCode == Keys.Back) {
var str = textBox1.Text;
if (str.Length > 0) {
textBox1.Text = str.Substring(0, str.Length - 1);
textBox1.SelectionStart = textBox1.Text.Length;
}
}
}

// Функция подсчитывает количество разделителей
public int SeparatorCount(string s) {
var ss = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0].ToString();
return (s.Length - s.Replace(ss, "").Length) / ss.Length;
}

// Позволяет вводить только знаковые вещественные числа с плавающей точкой
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
if (textBox1.Text.Length == 0 && (e.KeyChar == '-' || e.KeyChar == '+')) {
e.Handled = false;
} else {
e.Handled = !(char.IsDigit(e.KeyChar)
|| ((e.KeyChar == CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0])
&& (SeparatorCount(((TextBox)sender).Text) < 1)));
}
}
..
....... .......
94 410
Лучший ответ
Если очень приспичило, то примерно так:

private void OutputTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
OutputTextBox.Clear();
}

А вообще-то не надо удивлять пользователя нестандартным поведением стандартных компонентов.
Павел Мацевич
Павел Мацевич
56 575
Иван Черняков Открой виндосовский калькулятор, повводи туда циферки и нажми на del. Удивишься.
Иван Черняков Кстати, твой код ничего не делает. При запуске программы delete всё так же беспрепятственно удаляет символы справа, а моя программа предполагает запретить пользователю вводить символы в неправильном порядке, этот порядок можно нарушить клавишей delete.
Иван Черняков Куда надо поместить твой код, чтобы он работал?
Желательно никак. А для очистки текстбокса сделать отдельную кнопку. Или Ctrl+A, Del.
ER
Est Rand Sdk
92 464
Гугли, как считывать нажатие клавиш в поле ввода. Обрабатывай его, сверяй нажатую клавишу с кнопкой del и стирай. Как это делается на C# - без понятия, изучал другие языки.
Евгений Штыка
Евгений Штыка
11 349