Windows窗体中的TextBox验证

本文关键字:TextBox 验证 窗体 Windows | 更新日期: 2023-09-27 17:59:47

我有一些代码是为了检查TextBox中的某些字符,尽管出于某种原因,我在代码的"KeyChar"answers"Handled"部分遇到了问题:

private void textBox5_Validating(object sender, CancelEventArgs e)
{
    string allowedCharacterSet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890.'b'n";
    if (allowedCharacterSet.Contains(e.KeyChar.ToString()))
    {
        if (e.KeyChar.ToString() == "."
            && textBox5.Text.Contains("."))
        {
            e.Handled = true;
        }
    }
    else
    {
        e.Handled = true;
    }
}

Error   2   'System.ComponentModel.CancelEventArgs' does not contain a definition for 'KeyChar' and no extension method 'KeyChar' accepting a first argument of type 'System.ComponentModel.CancelEventArgs' could be found (are you missing a using directive or an assembly reference?)   D:'test'Form1.cs    602 48  App

Windows窗体中的TextBox验证

正如错误所说,CancelEventArgs中没有KeyChar属性。

您必须切换到文本框的KeyPress事件(其事件参数中具有KeyChar属性),或者在Validating事件中将字符串视为一个整体(而不是一次一个字符)

改为使用正则表达式怎么样?

private void TextBox5_Validating(object sender, System.EventArgs e)
{
    String AllowedChars = @"^a-zA-Z0-9.$";
    if(Regex.IsMatch(TextBox5.Text, AllowedChars))
    {
         e.Handled = true;
    }
    else
    {
         e.Handled = false;
    }
}

或者类似的东西。。。。

尝试使用KeyPressEventArgs e而不是CancelEventArgs e

http://msdn.microsoft.com/en-us/library/system.windows.forms.keypresseventargs.aspx

请尝试KeyPress事件。这可以防止用户键入您不想要的信件(通过设置e.Handled = true)。您仍然需要使用"验证"来确保他们没有从剪贴板粘贴一些坏数据。