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
(我不知道这是否算作自我推销,但它是开源的,所以我认为没关系。)