web-dev-qa-db-ja.com

MaskedTextBoxのIPアドレス?

MaskedTextBoxを使用して、ユーザーが無効なIPアドレスを入力しないようにするにはどうすればよいですか? (Windowsと同じように動作させたい)。

12
Nasreddine

これを試して:

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

注:これを使用するには、System.Net名前空間をインポートする必要があります。

using System.Net;
16
Kakashi

他の答えよりもはるかに簡単です:

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のオブジェクト
  • 解析された値のタイプ。マスクが異なる複数のMaskedTextBoxがある場合に必要

このイベントを受信すると、値を使用するか、値の何が問題かをユーザーに通知するかどうかを決定できます。

16

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
4
Dan

マスクを次のように設定します:###.###.###.###

このように表示されます:

enter image description here

1
Icarus

この質問に対する複雑な解決策はまだありません。 @HaraldDutchの回答が最も近いと思いますが、スペース文字を入力するのは難しいです。追加の指示を使用する:

IPAdressBox.ResetOnSpace = false;

一般的に解決された問題ですが、Parseメソッドを使用して独自のカスタムデータ型を実装するのがより複雑です。

            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);
1
ElConrado

Windowsを模したIPマスクテキストボックスを作成しました。

同じ幅、高さを持ち、ユーザーが255を超える値を入力したり、ボックスをジャンプしたりできないようにします。それでも必要で、試してみたい場合は、ここにあります。

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

(これがセルフプロモーションとしてカウントされるかどうかはわかりませんが、オープンソースなので、問題ないと思います。)

1
RuvenS