Маскирование текстового поля только для Numbers, но не принимает BackSpace
Вопрос
У меня есть текстовое поле, в котором я хотел бы хранить только цифры.Но если я наберу неправильный номер, я не смогу его исправить.Как я могу разрешить работу обратных пространств.Спасибо
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsNumber(e.KeyChar) != true)
{
e.Handled = true;
}
}
Решение
Вы также можете добавить проверку, чтобы разрешить управляющие символы:
if (Char.IsControl(e.KeyChar) != true && Char.IsNumber(e.KeyChar) != true)
{
e.Handled = true;
}
Обновлять:в ответ на комментарий человека-b к коду он/она предлагает следующий стиль (я бы лично написал именно так):
if (!Char.IsControl(e.KeyChar) && !Char.IsNumber(e.KeyChar))
{
e.Handled = true;
}
Другие советы
Правильный ответ:
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !сhar.IsNumber(e.KeyChar) && (e.KeyChar != '\b');
}
Вы также можете переопределить событие TextChanged:
private void textBox1_TextChanged(object sender, EventArgs e)
{
string text = (sender as TextBox).Text;
StringBuilder builder = new StringBuilder(String.Empty);
foreach (char character in text)
{
if (Char.IsDigit(character))
{
builder.Append(character);
}
}
(sender as TextBox).Text = builder.ToString();
}
Обратите внимание, что вам придется добавить код, чтобы установить положение курсора.
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsNumber(e.KeyChar) && e.KeyCode != Keys.Back)
e.Handled = True;
}
Немного более чистый формат приведенного выше:
private void amount_PaidTextBox_KeyPress(object sender, KeyPressEventArgs e)
{
e.Handled = !(Char.IsNumber(e.KeyChar) || (e.KeyChar==Keys.Back));
}
Я обнаружил, что следующее работает хорошо.Он включал дополнительные исключения для разрешения клавиши Backspace, клавиши со стрелками, клавиши удаления и т. д.Как разрешить только числовые значения (0-9) в поле ввода HTML с помощью jQuery?
private void txt_KeyPress(object sender, KeyPressEventArgs e)
{
if (Char.IsDigit(e.KeyChar) || e.KeyChar == '\b')
{
// Allow Digits and BackSpace char
}
else
{
e.Handled = true;
}
}
См. также ссылку: Маскирование текстового поля для приема только десятичных знаков десятичные дроби/12209854#12209854
Вы можете использовать следующее в событии нажатия клавиши:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar) & (e.KeyChar != 8)) e.Handled = true;
}