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)));
}
}
Для этого вам нужно подписать поле 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)));
}
}
Если очень приспичило, то примерно так:
private void OutputTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
OutputTextBox.Clear();
}
А вообще-то не надо удивлять пользователя нестандартным поведением стандартных компонентов.
private void OutputTextBox_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Delete)
OutputTextBox.Clear();
}
А вообще-то не надо удивлять пользователя нестандартным поведением стандартных компонентов.
Иван Черняков
Открой виндосовский калькулятор, повводи туда циферки и нажми на del. Удивишься.
Иван Черняков
Кстати, твой код ничего не делает. При запуске программы delete всё так же беспрепятственно удаляет символы справа, а моя программа предполагает запретить пользователю вводить символы в неправильном порядке, этот порядок можно нарушить клавишей delete.
Иван Черняков
Куда надо поместить твой код, чтобы он работал?

Желательно никак. А для очистки текстбокса сделать отдельную кнопку. Или Ctrl+A, Del.


Гугли, как считывать нажатие клавиш в поле ввода. Обрабатывай его, сверяй нажатую клавишу с кнопкой del и стирай. Как это делается на C# - без понятия, изучал другие языки.
Похожие вопросы
- Стоит ли дальше учить C#?
- Программирование на C Sharp (C#)
- Сегодня начал учить c#, решил сделать калькулятор простой и столкнулся с такой ошибкой при компиляции, хелпуйте.
- Что лучше C# или C++?
- Зачем разбивать код в C# на отдельные классы?
- Помогите пожалуйста. Написать на C#
- Python, C, C++, C#, Что выбрать-то?
- Помогите разобраться с заданием! C#
- Стоит ли изучать c# в 13 лет?
- Нужна помощь с задачей C#