2011-10-28 49 views
10

如何使用MaskedTextBox防止用戶輸入無效的IP地址? (我希望它的行爲就像Windows一樣)。MaskedTextBox中的IP地址?

+0

爲什麼不只是讀取值並保存用戶的一些麻煩?永遠不要讓用戶做你能爲他們做的事情。 – Woot4Moo

回答

14

試試這個:

IPAddress ipAddress; 
if (IPAddress.TryParse(maskedTextBoxY.Text, out ipAddress)) 
{ 
    //valid ip 
} 
else 
{ 
    //is not valid ip 
} 

注意:要使用它,您需要導入System.Net命名空間:

using System.Net; 
4

最好使用REGEX來驗證用戶輸入。這裏有一個例子:

  string pattern = @"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b"; 

     string ip1 = "192.168.0.1"; 
     string ip2 = "302.0.0.1"; 

     Regex.IsMatch(ip1, pattern); // returns true 
     Regex.IsMatch(ip2, pattern); // returns false 
+7

現在你有兩個問題... – Woot4Moo

+0

嗯,自從什麼時候?這根本不回答這個問題。 -1 – Ryan

+1

@minitech - 我相信Woot4Moo是指那種關於正則表達式的舊鋸 - 參見http://www.codinghorror.com/blog/2008/06/regular-expressions-now-you-have-two-problems.html –

1

設置屏蔽到:###.###.###.###

會顯示如下:

enter image description here

+0

和什麼是IPv6? – Woot4Moo

+0

@ Woot4Moo我不認爲可以做一個單一的面具。您需要聽取按鍵並處理至少是不允許的字符 – Icarus

+0

正確,MaskedTextBox不允許您直接進行復雜的驗證。您可以使用KeyPress事件來讀取用戶輸入並確定它是否有效。而正確的Regex表達式確實有助於完成這項任務。 – Dan

13

比其他的答案簡單多了:

使用System.Net.IPAddress和System.Windows.Forms.MaskedTextBox

設置MaskedTextBox中的以下屬性:

MaskedTextBox.Mask = ###.###.###.### 
MaskedTextBox.ValidatingType = typeof(System.Net.IPAddress); 

每當文本框驗證時,引發事件MaskedTextBox.TypeValidationCompleted。 事件參數顯示如下:

  • 輸入的文本是否可以作爲IP地址使用? (=確實System.Net.IPAddress.TryParse返回OK)的誤差的
  • 說明作爲字符串
  • 分析得到的值(= System.NET.IpAddress
  • 類型分析得到的值中的一個對象。需要如果你有幾個MaskedTextBoxes不同的面具

在收到此事件,你可以決定是否使用該值或通知有什麼不對的價值用戶。

+1

不工作。只適用於123.123.123.123 - 即所有字符存在。 「123.4.5.6」的IP地址將顯示爲「123.456 ..」 –

+0

訂閱事件KeyDown,並在操作員按下點號/分號/逗號/右箭頭/選項卡等時以您希望成爲輸入的方式作出反應。 –

0

沒有針對此問題沒有複雜的解決方案然而,我認爲@HaraldDutch的答案是最接近的,但它是不是從空間字符的輸入prevet。 使用附加指令:

IPAdressBox.ResetOnSpace = false; 

generaly解決的問題,但更復雜的是實現typewith解析方法的自定義數據。

  public class IPValidator 
      { 
       public static IPValidator Parse(string input) 
       { 
        Regex regexpr = new Regex(@" "); 
        Match match = regexpr.Match(input); 
        if (match.Success) 
         return new IPValidator(); 
        else throw new ArgumentException(input); 
       } 
      } 

其中regexpr是驗證IP的特定表達式。之後,它可以用作驗證類型:

IPAdressBox.ValidatingType = typeof(IPValidator); 
0

我做了一個IP掩碼的文本框,模仿Windows之一。

具有相同的寬度和高度,可以防止用戶輸入> 255的值,跳轉框等等。 如果您仍然需要它,並希望嘗試一下它在這裏:

https://github.com/RuvenSalamon/IP-MaskedTextBox

(我不知道這是否算作自我宣傳,但它是開源的,所以我估計它的確定)