#c# #winforms
Вопрос:
Как я могу поместить маску в текстовое поле формы выигрыша, чтобы оно допускало только числа? И как это работает для других масок данных, почтового индекса телефона и т. Д.
Я использую Visual Studio 2008 C#
Спасибо.
Ответ №1:
Вы можете использовать элемент управления MaskedTextBox
http://msdn.microsoft.com/en-us/library/system.windows.forms.maskedtextbox.aspx
Ответ №2:
Вы хотите предотвратить ввод, который не разрешен, или проверить ввод, прежде чем можно будет продолжить?
Первое может сбить пользователей с толку, когда они нажимают клавиши, но ничего не происходит. Обычно лучше показывать их нажатия клавиш, но отображать предупреждение о том, что ввод в данный момент недействителен. Вероятно, также довольно сложно настроить, например, маскировку регулярного выражения адреса электронной почты.
Посмотрите на ErrorProvider, чтобы позволить пользователю вводить то, что он хочет, но показывать предупреждения при вводе.
Для вашего первого предложения о текстовом поле, в котором разрешены только числа, вы также можете рассмотреть возможность уменьшения числа.
Комментарии:
1. Правильно разработанный пользовательский интерфейс не должен оставлять сомнений в том, почему их текст не был набран. Я работаю в команде разработчиков, разрабатывающей программное обеспечение для выставления медицинских счетов для людей, которые никогда раньше не пользовались компьютерами, и даже они понимают, почему письма не попадают в поле SSN или идентификационный номер страховой компании.
2. В основном я бы использовал проверку ввода, предотвращение только иногда в таких случаях, как SSN, поиск по идентификатору и т. Д.
Ответ №3:
Управляйте событием нажатия клавиши пользователя, чтобы замаскировать ввод, не допуская появления нежелательных символов.
Разрешить только числа с десятичными дробями:
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// allows 0-9, backspace, and decimal
if (((e.KeyChar < 48 || e.KeyChar > 57) amp;amp; e.KeyChar != 8 amp;amp; e.KeyChar != 46))
{
e.Handled = true;
return;
}
// checks to make sure only 1 decimal is allowed
if (e.KeyChar == 46)
{
if ((sender as TextBox).Text.IndexOf(e.KeyChar) != -1)
e.Handled = true;
}
}
Разрешить только значения телефонных номеров:
private void txtPhone_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar >= '0' amp;amp; e.KeyChar <= '9') return;
if (e.KeyChar == ' ' || e.KeyChar == '-') return;
if (e.KeyChar == 8) return;
e.Handled = true;
}
Ответ №4:
Как было сказано выше, используйте текстовое поле в маске.
Также стоит использовать средство защиты от ошибок.
Ответ №5:
Используйте текстовое поле Маска и назначьте MasktextboxId.Mask.
Если вы хотите использовать текстовое поле, вам нужно написать для него регулярное выражение