Мне нужно проверить символы, введенные пользователем в MaskedTextBox. Какие символы допустимы, зависит от уже введенных. Я пробовал использовать IsInputChar и OnKeyPress, но независимо от того, возвращаю ли я false в IsInputChar или устанавливаю e.Handled в значение true в OnKeyPress, для текста поля по-прежнему устанавливается недопустимое значение.
Как предотвратить нажатие клавиши для обновления текста MaskedTextBox?
ОБНОВЛЕНИЕ: MaskedTextBox не TextBox. Я не думаю, что это должно иметь значение, но судя по количеству людей, говорящих мне, что e.Handled должен работать, возможно, так оно и есть.
Ответ 1 · рейтинг 4 · NileshChauhan
Это не будет вводить символ "x" в textbox1.
char mychar='x'; // your particular character
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == mychar)
e.Handled = true;
}
EDIT: это работает и для MaskedTextBox.
ХТН
Ответ 2 · Marc Gravell
KeyPress должен это сделать; ты делаешь это в форме? или на контроле? Например:
static void Main() {
TextBox tb = new TextBox();
tb.KeyPress += (s, a) =>
{
string txt = tb.Text;
if (char.IsLetterOrDigit(a.KeyChar)
&& txt.Length > 0 &&
a.KeyChar <= txt[txt.Length-1])
{
a.Handled = true;
}
};
Form form = new Form();
form.Controls.Add(tb);
Application.Run(form);
}
(допускаются только "возрастающие" символы)
Обратите внимание, что это не защитит вас от копирования/вставки - возможно, вам также придется посмотреть на TextChanged и/или Validate.