2011-10-28 222 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

今、あなたは2つの問題があります... – 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

とは何ですか? – Woot4Moo

+0

@ Woot4Moo私は単一のマスクではできないと思います。押されたキーを聞く必要があります。文字は許可されていません。 – Icarus

+0

MaskedTextBoxでは、複雑な検証を直接行うことはできません。 KeyPressイベントを使用してユーザーの入力を読み取り、有効であることを判断できます。そして、正しい正規表現がこの作業を行うのに役立ちます。 – Dan

13

他の回答よりもはるかに簡単:

利用可能System.Net.IPAddressとSystem.Windows.Forms.MaskedTextBox

はMaskedTextBoxの次のプロパティを設定します。

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

テキストボックスが検証されるたびに、イベントMaskedTextBox.TypeValidationCompletedが送出されます。 イベント引数は次のとおりです。

  • 入力されたテキストはIPアドレスとして受け入れられますか?ストリング
  • として解析された値(誤差の
  • 説明(= OKを返すSystem.Net.IPAddress.TryParseない)=
  • 可能System.Net.IPAddress
  • 解析された値の型のオブジェクト。必要あなたがこのイベントを受信すると、異なるマスク

を持ついくつかのMaskedTextBoxesを持っている場合は、値を使用するか、値が間違っているものをユーザに通知するかどうかを決定することができます。

+1

123.123.123.123のためだけに機能します。すべての文字が存在します。 IPアドレス「123.4.5.6」は「123.456 ..」と表示されます。 –

+0

イベントKeyDownに登録し、オペレータがドット/セミコロン/カンマ/右矢印/タブなどを押した場合の入力方法に反応します。 –

0

この質問には、複雑な解決策はありませんまだ@HaraldDutchの答えは一番近いと思いますが、それは空白文字で入力からprevetしないでください。 追加の命令の使用:

IPAdressBox.ResetOnSpace = false; 

generaly解決される問題を、より多くの複合体は、Parseメソッド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を検証する特定の表現です。その後、ValidatingTypeとして使用することができます:

IPAdressBox.ValidatingType = typeof(IPValidator); 
0

私はWindowsのものを模倣したIPマスクされたテキストボックスを作成しました。

同じ幅、高さを持ち、ユーザーが> 255値を入力したり、ジャンプボックスなどを使用しないようにします。 あなたはまだそれを必要とし、それはここにそれを試してみたい場合:(。これは自己PRとしてカウントしている場合は、私は知りませんが、それはので、私はそれは大丈夫だ数えるオープンソースです)

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