MaskedTextBox 中的 IP 地址?

发布于 2024-12-12 11:28:26 字数 67 浏览 2 评论 0原文

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

How can I use a MaskedTextBox to prevent the user from entering an invalid IP address? (I want it to behave just like the Windows one).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

伤痕我心 2024-12-19 11:28:26

比其他答案简单得多:

使用 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,则

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

Much simpler than the other answers:

Use System.Net.IPAddress and System.Windows.Forms.MaskedTextBox

set the following properties of the MaskedTextBox:

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

whenever the text box is validating, event MaskedTextBox.TypeValidationCompleted is raised.
The event arguments show the following:

  • Is the typed text acceptable as an IP address? (= does System.Net.IPAddress.TryParse return ok)
  • Description of the error as a string
  • The parsed value (= an object of System.NET.IpAddress
  • The type of the parsed value. Needed if you have several MaskedTextBoxes with different masks

Upon receipt of this event you can decide whether to use the value or notify the user what is wrong with the value.

抚你发端 2024-12-19 11:28:26

试试这个:

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

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

using System.Net;

Try this:

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

note: to use it, you need import the System.Net namespace:

using System.Net;
薆情海 2024-12-19 11:28:26

最好使用 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

It is better to use REGEX to validate user input. Here's an example:

         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
倾听心声的旋律 2024-12-19 11:28:26

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

将显示如下:

在此输入图像描述

Set the mask to: ###.###.###.###

Will display like this:

enter image description here

剩一世无双 2024-12-19 11:28:26

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

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

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

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

I made an IP masked textbox that mimicks the Windows one.

Has the same width, height, prevents users from entering >255 values, jumps boxes, etc, etc...
If you still need it and want to try it out it's here:

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

(I don't know if this counts as self promotion but it's open-source so I reckon it's ok.)

执着的年纪 2024-12-19 11:28:26

这个问题还没有复杂的解决方案。我认为@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);

There is no complex solution for this question yet. I think @HaraldDutch answer is closest, but it is not prevet from input with space character.
Using additional instruction:

IPAdressBox.ResetOnSpace = false;

generaly solved problem, but more complex is to implement own custom data typewith Parse method.

            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);
                }
            }

Where regexpr is specific expresion to validate IP. After that it can be use as ValidatingType:

 IPAdressBox.ValidatingType = typeof(IPValidator);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文