none
Как поймать ввод строчной буквы, а не прописной? RRS feed

  • Вопрос

  • Следующий код запрещает ввод прописной буквы "A"

            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.A)
                {
                    e.Handled = true;
                }
            }

    Как запретить ввод строчной буквы "A"?


    Ещё один вопрос, следующий код не срабатывает

            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar == (char)Keys.Up)
                {
                    e.Handled = true;
                }
            }

    Я нажимаю не стрелку вверх, и в textbox1 курсор перемещается.

    Как запретить действие кнопки Up?

    4 июня 2012 г. 17:54

Ответы

  • KeyChar это только для символов. Системные клавиши им не обрабатываются. Что бы обрабатывать системные клавиши нужно смотреть e.KeyCode в событии KeyUp или KeyDown

    А отлов букв лучше работает так:

    private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
    	if (e.KeyChar == "А"[0]) {
    		e.Handled = true;
    	}
    }


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Ziya Ceferov 4 июня 2012 г. 18:29
    4 июня 2012 г. 18:21
    Отвечающий
  • В следующем коде запрещается ввод строчной и прописной буквы "A"

            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar.ToString() == "A") e.Handled = true;
                if (e.KeyChar.ToString() == "a") e.Handled = true;
            }

    А следующий код запрещает передачу команд таких клавишей как Left

            private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyData == Keys.Left) e.Handled = true;
            }

    Но совместить обе вида запрет в одном событии я не смог, но это не проблема.

    • Помечено в качестве ответа Ziya Ceferov 5 июня 2012 г. 16:37
    5 июня 2012 г. 16:37

Все ответы

  • KeyChar это только для символов. Системные клавиши им не обрабатываются. Что бы обрабатывать системные клавиши нужно смотреть e.KeyCode в событии KeyUp или KeyDown

    А отлов букв лучше работает так:

    private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
    	if (e.KeyChar == "А"[0]) {
    		e.Handled = true;
    	}
    }


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    • Помечено в качестве ответа Ziya Ceferov 4 июня 2012 г. 18:29
    4 июня 2012 г. 18:21
    Отвечающий
  • KeyDown

    Я хочу перехватывать все клавиши одном событием Keydown, но следующий код не работает:

            private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyData == Keys.A[0]) e.Handled = true;
            }

    Если убрать [0], тогда данный код запрещает ввод прописной буквы "A".

    Как применить запрет строчной буквы в данном событии?

    4 июня 2012 г. 18:33
  • Если убрать [0], тогда данный код запрещает ввод прописной буквы "A".

    А вы уверены, что так работает? Может у вас и KeyPres попутно задан?

    Обратите внимание на эту статью MSDN. Там говорится что Handled в KeyEventArgs, который передается в событиях KeyDown и KeyUp не влияет на отображение символов в поле. Решение этой проблемы описано в этой статье.

    Кстати будет полезно взглянуть на вопрос и ответы из этого топика.

    Ну и так сказать для закрепления материала. Вы дважды за этот топик путали значения Char с значениями Keys. Char - это один символ, а Keys это код клавиши на клавиатуре, который не зависит от раскладки и регистра, то есть у одной клавиши всегда один код. Char передается в KeyPres, а Keys в KeyDown и KeyUp.


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    4 июня 2012 г. 19:47
    Отвечающий
  • В следующем коде запрещается ввод строчной и прописной буквы "A"

            private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (e.KeyChar.ToString() == "A") e.Handled = true;
                if (e.KeyChar.ToString() == "a") e.Handled = true;
            }

    А следующий код запрещает передачу команд таких клавишей как Left

            private void textBox1_KeyDown(object sender, KeyEventArgs e)
            {
                if (e.KeyData == Keys.Left) e.Handled = true;
            }

    Но совместить обе вида запрет в одном событии я не смог, но это не проблема.

    • Помечено в качестве ответа Ziya Ceferov 5 июня 2012 г. 16:37
    5 июня 2012 г. 16:37
  • Посмотрел я эту тему. А что вы, собственно, хотите сделать? Изначальная цель какова? В чём суть перехвата определённых клавиш?

    Может, подойдёт использование компонента MaskedTextBox?

    5 июня 2012 г. 20:47