我在StackOverflow上阅读的一些文章指出使用TextBox
而不是MaskedTextBox
,因此我使用TextBox
从我的用户那里捕获了IP。
我发现StackOverflow有一个很好的正则表达式模式来验证IP是否有效
string pattern = @"^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}$";
它生成一个有效的真正的bool。但是使用TextBox
时,我想知道如何向TextBox
添加屏蔽,这样不仅默认文本为0.0.0.0,而且在框中键入IP时,它会保留周期标记。因此,用户无需输入它们,因此他们唯一的输入就是数字。
任何帮助都非常感谢!
答案 0 :(得分:2)
我曾经不得不做类似的事情,将IPv4作为用户的输入。
我使用了这个免费控制。
与该控件相关的文章:http://www.codeproject.com/Articles/9352/A-C-IP-Address-Control
似乎是一个轻量级的控件,没有经过测试,在Google上找到了! http://sanity-free.org/127/an_ipaddress_control_the_win32_sysipaddress32_control_in_csharp.html
答案 1 :(得分:0)
我正在寻找非常相似的东西。我发现在将更简单的正则表达式与IPAddress.TryParse结合使用时,我可以使用更改后的文本并验证文本框上的事件处理程序,以确保输入了有效的IP4。在以下示例中,文本框名称为tbIPInput。一些字体修饰可以帮助识别执行期间发生的事情。验证部分可防止人在输入有效IP之前退出文本框。
private void tbIPInput_TextChanged(object sender, EventArgs e)
{
Regex regPattern = new Regex(@"\d+\.\d+\.\d+\.\d+");
if (regPattern.IsMatch(tbIPInput.Text) && IPAddress.TryParse(tbIPInput.Text, out IPAddress address))
{
//Valid IP is detected
tbIPInput.ForeColor = Color.Green;
tbIPInput.Font = new Font(tbIPInput.Font, FontStyle.Regular);
}
else
{
//Invalid IP entered so far
tbIPInput.ForeColor = Color.Red;
tbIPInput.Font = new Font(tbIPInput.Font, FontStyle.Italic);
}
}
private void tbIPInput_Validating(object sender, CancelEventArgs e)
{
Regex regPattern = new Regex(@"\d+\.\d+\.\d+\.\d+");
if (regPattern.IsMatch(tbIPInput.Text) && IPAddress.TryParse(tbIPInput.Text, out IPAddress address))
{
//Valid IP is detected
e.Cancel = false;
}
else
{
//Invalid IP entered so far do not allow focus to change
e.Cancel = true;
}
}