C#在MaskedTextBox上使用TextBox进行IP输入。掩盖问题

时间:2013-03-29 12:46:03

标签: c#

我在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时,它会保留周期标记。因此,用户无需输入它们,因此他们唯一的输入就是数字。

任何帮助都非常感谢!

2 个答案:

答案 0 :(得分:2)

我曾经不得不做类似的事情,将IPv4作为用户的输入。

我使用了这个免费控制。

IP Address Control

与该控件相关的文章: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;
        }
    }