12

如何使用 MaskedTextBox 防止用户输入无效的 IP 地址?(我希望它的行为就像 Windows 一样)。

4

6 回答 6

21

比其他答案简单得多:

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

设置 MaskedTextBox 的以下属性:

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

每当验证文本框时,都会引发事件 MaskedTextBox.TypeValidationCompleted。事件参数显示以下内容:

  • 输入的文本是否可以作为 IP 地址?(= System.Net.IPAddress.TryParse 返回正常)
  • 错误描述为字符串
  • 解析的值(= System.NET.IpAddress 的一个对象
  • 解析值的类型。如果您有多个具有不同掩码的 MaskedTextBox,则需要

收到此事件后,您可以决定是使用该值还是通知用户该值有什么问题。

于 2013-09-23T14:11:14.027 回答
18

试试这个:

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

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

using System.Net;
于 2011-10-28T02:41:39.403 回答
5

最好使用 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
于 2011-10-28T00:47:30.750 回答
2

将掩码设置为:###.###.###.###

将显示如下:

在此处输入图像描述

于 2011-10-28T00:56:16.153 回答
1

这个问题还没有复杂的解决方案。我认为@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);
于 2015-05-04T18:45:19.700 回答
1

我制作了一个模仿 Windows 的 IP 屏蔽文本框。

具有相同的宽度、高度、防止用户输入 >255 的值、跳框等……如果您仍然需要它并想尝试一下,这里是:

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

(我不知道这算不算自我推销,但它是开源的,所以我认为没关系。)

于 2016-04-20T18:51:02.573 回答