maskedTextBox中的IP地址验证C#

时间:2015-05-04 11:23:41

标签: c# ip-address

我在C#中有申请表,我有以下代码来验证掩码文本框中的IP地址:

private void MainForm_Load(object sender, EventArgs e)
{
    IPAdressBox.Mask = "###.###.###.###";
    IPAdressBox.ValidatingType = typeof(System.Net.IPAddress);
    IPAdressBox.TypeValidationCompleted += new TypeValidationEventHandler(IPAdress_TypeValidationCompleted);
}
void IPAdress_TypeValidationCompleted(object sender, TypeValidationEventArgs e)
{
    if(!e.IsValidInput)
    {
        errorProvider1.SetError(this.IPAdressBox,"INVALID IP!");             
    }
    else
    {
        errorProvider1.SetError(this.IPAdressBox, String.Empty);
    }
}

在IPAdres_TypeValidationComleted函数中,如果if语句为true,则errorProvider1闪烁并给出" INVALID IP"消息否则它应该消失。问题是输入类型似乎总是无效,即使我输入了有效的IP地址。

3 个答案:

答案 0 :(得分:5)

这可能是由于区域设置和小数。 你可以尝试这个面具,看看它是否解决了这个问题:

IPAdressBox.Mask = @"###\.###\.###\.###";

答案 1 :(得分:2)

当您将MaskedTextBox.ValidatingType设置为某种类型时,系统会使用Parse(string)的文字调用此类型的MaskedTextBox方法,在本例中为IPAddress.Parse(string)

如果您的文化使用逗号作为分隔符,则输入MaskedTextBox.Text的{​​{1}}将生成文字123.123.123.123

您可以在123,123,123,123中看到这一点:IPAdress_TypeValidationCompleted将包含“System.FormatException:指定了无效的IP地址。”,因为IP地址通常不能包含逗号。

如果您将面具改为e.Message,转出点,它们将为interpreted literally as opposed to being the current culture's decimal separator

答案 2 :(得分:2)

面具应该是:

IPAdressBox.Mask = @"000\.000\.000\.000"; 
应该添加程序中的

IPAdressBox.ResetOnSpace = false;