2015-05-04 211 views
1

我在C#應用程序的形式和我有以下代碼從掩碼文本框驗證IP地址: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功能,而如果聲明是真實的errorProvider1閃爍,並給予「無效IP「消息,否則它應該消失。問題是,即使我輸入了有效的IP地址,輸入類型似乎總是無效的。

+0

這裏是一個解決方案: [** **解決方案] [1] [1]:http://stackoverflow.com/questions/7924000/ip-address-in-a-maskedtextbox – DareDevil

回答

5

這可能是由於區域設置和小數。 你可以試試這個面具,看看它是否解決了問題:

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

謝謝!對於我的問題來說這是一個很好的答案,但總的來說,這並不是複雜的解決方案,因爲如果在這種情況下鍵入127.0.0.1,它將返回帶有如下空格字符的地址:127.0 __。0 __。1,驗證它是無效的。 – ElConrado

2

當您設置MaskedTextBox.ValidatingType一種類型,這種類型的Parse(string)方法將與MaskedTextBox的文字叫,在這種情況下IPAddress.Parse(string)

如果您的文化使用逗號作爲分隔符,輸入爲123.123.123.123MaskedTextBox.Text將生成文本123,123,123,123

您可以在IPAdress_TypeValidationCompleted中看到:e.Message將包含「System.FormatException:指定了無效的IP地址。」,因爲IP地址通常不能包含逗號。

如果您將掩碼更改爲###\.###\.###\.###,則將轉義爲interpreted literally as opposed to being the current culture's decimal separator

2

面膜應該是:

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

在程序應添加:

IPAdressBox.ResetOnSpace = false;