首页 文章

如何使文本框仅接受字母字符

提问于
浏览
3

我有一个带有 maskedtextbox 控件的Windows窗体应用程序,我只想接受字母值 .

理想情况下,这将表现为按下除字母键之外的任何其他键将不产生结果或立即向用户提供关于无效字符的反馈 .

7 回答

  • 1

    试试this代码

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !(char.IsLetter(e.KeyChar) || e.KeyChar == (char)Keys.Back || e.KeyChar == (char)Keys.Space);
        }
    
  • 4

    MSDN(此代码显示如何处理KeyDown事件以检查输入的字符 . 在此示例中,它仅检查数字输入 . 您可以修改它以使其适用于字母输入而不是数字):

    // Boolean flag used to determine when a character other than a number is entered.
    private bool nonNumberEntered = false;
    
    // Handle the KeyDown event to determine the type of character entered into the control.
    private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
    {
        // Initialize the flag to false.
        nonNumberEntered = false;
    
        // Determine whether the keystroke is a number from the top of the keyboard.
        if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
        {
            // Determine whether the keystroke is a number from the keypad.
            if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
            {
                // Determine whether the keystroke is a backspace.
                if(e.KeyCode != Keys.Back)
                {
                    // A non-numerical keystroke was pressed.
                    // Set the flag to true and evaluate in KeyPress event.
                    nonNumberEntered = true;
                }
            }
        }
        //If shift key was pressed, it's not a number.
        if (Control.ModifierKeys == Keys.Shift) {
            nonNumberEntered = true;
        }
    }
    
    // This event occurs after the KeyDown event and can be used to prevent
    // characters from entering the control.
    private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
    {
        // Check for the flag being set in the KeyDown event.
        if (nonNumberEntered == true)
        {
            // Stop the character from being entered into the control since it is non-numerical.
            e.Handled = true;
        }
    }
    
  • 0

    在每个可以想象的编程论坛上,这个问题可能已被提出并回答了一百万次 . 所提供的每个答案都具有与所述要求不同的区别 .

    由于您使用的是 MaskedTextBox ,因此您可以使用其他验证功能,而不需要处理按键 . 您只需将Mask属性设置为"L"(需要字符)或"?"(可选字符) . 为了向用户显示输入不可接受的反馈,您可以使用 BeepOnError 属性或添加工具提示以显示错误消息 . 应该在 MaskedInputRejected 事件处理程序中实现此反馈机制 .

    MaskedTextBox 控件提供 ValidatingType 属性来检查传递Mask的要求的输入,但可能不是正确的数据类型 . 在此类型验证后引发 TypeValidationCompleted 事件,您可以处理它以确定结果 .

    如果您仍然需要处理按键事件,请继续阅读......!

    在我的情况下,我建议的方法是,不是处理 KeyDown 事件(表面上你不需要高级键处理功能)或使用正则表达式匹配输入(坦率地说,矫枉过正),我只是使用内置的属性Char结构 .

    private void maskedTextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
      Char pressedKey = e.KeyChar;
      if (Char.IsLetter(pressedKey) || Char.IsSeparator(pressedKey) || Char.IsPunctuation(pressedKey))
      {
        // Allow input.
        e.Handled = false
      }
      else
        // Stop the character from being entered into the control since not a letter, nor punctuation, nor a space.
        e.Handled = true;
      }
    }
    

    请注意,此代码段还允许您处理标点和分隔符键 .

  • 0

    此代码将区分字母字符键和非字母键:

    private void maskedTextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (Regex.IsMatch(e.KeyChar.ToString(), @"\p{L}"))
        {
            // this is a letter
        }
        else
        {
            // this is NOT a letter
        }
    }
    

    更新:请注意,上述正则表达式模式将仅匹配字母字符,因此不允许使用空格,逗号,点等 . 为了允许更多种类的字符,您需要将它们添加到模式中:

    // allow alphabetic characters, dots, commas, semicolon, colon 
    // and whitespace characters
    if (Regex.IsMatch(e.KeyChar.ToString(), @"[\p{L}\.,;:\s]"))
    
  • 3
    // This is  to allow only numbers.
    // This Event Trigger, When key press event occures ,and it only allows the Number and Controls., 
    private void txtEmpExp_KeyPress(object sender, KeyPressEventArgs e)
    {
        if(Char.IsControl(e.KeyChar)!=true&&Char.IsNumber(e.KeyChar)==false)
        {
            e.Handled = true;
        }
    }
    
    //At key press event it will allows only the Characters and Controls.
    private void txtEmpLocation_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (Char.IsControl(e.KeyChar) != true && Char.IsNumber(e.KeyChar) == true)
        {
            e.Handled = true;
        }
    }
    
  • 6

    //添加文本框选择它并转到事件&在事件列表中双击“按键”事件 .

    if (!char.IsLetter(e.KeyChar))
            {
                MessageBox.Show("Enter only characters");
            }
        }
    
  • 3

    这对我有用:)

    private void txt_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !((e.KeyChar != 'ñ' && e.KeyChar != 'Ñ') && char.IsLetter(e.KeyChar));
        }
    

相关问题