我在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地址。
答案 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;