Как предотвратить обновление текста MaskedTextBox нажатием клавиши?

Мне нужно проверить символы, введенные пользователем в MaskedTextBox. Какие символы допустимы, зависит от уже введенных. Я пробовал использовать IsInputChar и OnKeyPress, но независимо от того, возвращаю ли я false в IsInputChar или устанавливаю e.Handled в значение true в OnKeyPress, для текста поля по-прежнему устанавливается недопустимое значение.

Как предотвратить нажатие клавиши для обновления текста MaskedTextBox?

ОБНОВЛЕНИЕ: MaskedTextBox не TextBox. Я не думаю, что это должно иметь значение, но судя по количеству людей, говорящих мне, что e.Handled должен работать, возможно, так оно и есть.


person Simon    schedule 13.03.2009    source источник


Ответы (3)


Это не будет вводить символ «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.

ХТН

person NileshChauhan    schedule 13.03.2009
comment
Это то, что я делаю. Возможно, это не работает, потому что это MaskedTextBox? - person Simon; 13.03.2009

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.

person Marc Gravell    schedule 13.03.2009

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown.aspx Может ли помочь событие KeyDown?

person xan    schedule 13.03.2009