MaskedTextBoxを使用して、ユーザーが無効なIPアドレスを入力しないようにするにはどうすればよいですか? (Windowsと同じように動作させたい)。
これを試して:
IPAddress ipAddress;
if (IPAddress.TryParse(maskedTextBoxY.Text, out ipAddress))
{
//valid ip
}
else
{
//is not valid ip
}
注:これを使用するには、System.Net
名前空間をインポートする必要があります。
using System.Net;
他の答えよりもはるかに簡単です:
System.Net.IPAddressおよびSystem.Windows.Forms.MaskedTextBoxを使用します
maskedTextBoxの次のプロパティを設定します。
MaskedTextBox.Mask = ###.###.###.###
MaskedTextBox.ValidatingType = typeof(System.Net.IPAddress);
テキストボックスの検証中は常に、イベントMaskedTextBox.TypeValidationCompletedが発生します。イベント引数は以下を示します。
このイベントを受信すると、値を使用するか、値の何が問題かをユーザーに通知するかどうかを決定できます。
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
マスクを次のように設定します:###.###.###.###
このように表示されます:
この質問に対する複雑な解決策はまだありません。 @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);
Windowsを模したIPマスクテキストボックスを作成しました。
同じ幅、高さを持ち、ユーザーが255を超える値を入力したり、ボックスをジャンプしたりできないようにします。それでも必要で、試してみたい場合は、ここにあります。
https://github.com/RuvenSalamon/IP-MaskedTextBox
(これがセルフプロモーションとしてカウントされるかどうかはわかりませんが、オープンソースなので、問題ないと思います。)