MaskedTextBox中的IP地址?

如何使用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); 

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

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

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

最好使用REGEX来validation用户输入。 这是一个例子:

  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是用于validationIP的特定表达式。 之后它可以用作ValidatingType:

  IPAdressBox.ValidatingType = typeof(IPValidator); 

我制作了一个模仿Windows的IP掩码文本框。

具有相同的宽度,高度,防止用户输入> 255值,跳箱等等…如果你仍然需要它并想要尝试它在这里:

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

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