Ввод в TextBox только определенных символов

Здравствуйте, как сделать чтоб поле textbox понимало только [A-Za-z0-9], а остальные символы - нет? Т.е в поле писать можно только латинскими символами и цифрами, остальные знаки игнорируются.Это нужно для написания формы регистрации, аналог такой формы можно наблюдать в программе "Steam".пробовал через Regex:
private bool TextBoxСheck(String text) {
return new Regex("[^A-Za-z0-9]").IsMatch(text);
}
 
private void TextBox_TextChanged(object sender, EventArgs e) {
if (TextBox.Text != "" && TextBoxСheck(TextBox.Text)) {
TextBox.Text = "";
}
}
но данная проверка будет удалять весь контент текст бокса если была допущена ошибка, а мне надо чтоб он не допускал написания ошибки.Пробовал через KeyPressEvent и KeyEvent.. это уже было ближе но не тот эффект...Спасибо!
6 ответов

с регулярными выражениями не знаком совершенно, поэтому просто попытался чутка твой код поменять... не уверен насчет того, что это самый лучший с точки зрения быстродействия или еще чего-нибудь код, но... он работает
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string tempstr = "";
            foreach (char sym in textBox1.Text)
            {
                if (!TextBoxСheck(sym.ToString())) 
                    tempstr += sym.ToString();
            }
            textBox1.Text = tempstr;
            textBox1.SelectionStart = textBox1.TextLength;
        }
 
        private bool TextBoxСheck(string text)
        {
            return new Regex("[^A-Za-z0-9]").IsMatch(text);
        }


Вроде работает спасибо! Тему еще не закрывайте возможно будут дополнительные вопросы, чтоб я новую не создавал я здесь напишу.


textbox понимало только [A-Za-z0-9], а остальные символы - нет?
Правильное решение - обрабатывать событие OnKeyDown, в котором проверять, соотвествие кода символа допустимым промежуткам, и если нет, указывать SuppressKeyPress:
private void txtBox1_KeyDown(object sender, KeyEventArgs e)
 {
                e.SuppressKeyPress = true;


Правильное решение - обрабатывать событие OnKeyDown, в котором проверять, соотвествие кода символа допустимым промежуткам, и если нет, указывать SuppressKeyPress:
private void txtBox1_KeyDown(object sender, KeyEventArgs e)
 {
                e.SuppressKeyPress = true;
Можете навести пример? Я пробовал но у меня не получалось.Сейчас я пользуюсь этим:
private void textBox1_TextChanged(object sender, EventArgs e)
        {
            string tempstr = "";
            foreach (char sym in textBox1.Text)
            {
                if (!TextBoxСheck(sym.ToString())) 
                    tempstr += sym.ToString();
            }
            textBox1.Text = tempstr;
            textBox1.SelectionStart = textBox1.TextLength;
        }
 
        private bool TextBoxСheck(string text)
        {
            return new Regex("[^A-Za-z0-9]").IsMatch(text);
        }
Есть маленькая трудность, я не могу использовать комбинацию клавиш Ctrl + A в поле для выделения всего текста...


введет только буквы, цифры и BackSpase(что бы удалять можно было)
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar)||Char.IsDigit(e.KeyChar)||e.KeyChar==(char)Keys.Back)
                e.Handled = false;
            else
                e.Handled = true;
        }
извините, не заметил что там только про латинские говорилось
            if (((e.KeyChar>'A'&&e.KeyChar<'Z')||(e.KeyChar>'a'&&e.KeyChar<'z'))||Char.IsDigit(e.KeyChar)||e.KeyChar==(char)Keys.Back)
                e.Handled = false;
            else
                e.Handled = true;


Спасибо!малась подправил:
if (((e.KeyChar >= 'A' && e.KeyChar <= 'Z') || (e.KeyChar >= 'a' && e.KeyChar <= 'z')) || Char.IsDigit(e.KeyChar) || e.KeyChar == (char)Keys.Back)
e.Handled = false;
else
e.Handled = true;