1

我在 StackOverflow 上阅读的几篇文章表明要使用TextBoxover 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}$";

它在有效时生成一个真正的布尔值。但是,使用 aTextBox我想知道如何在其中添加掩码,TextBox以便不仅默认文本为 0.0.0.0,而且在框中键入 IP 时,它会将句点标记保留在适当的位置,因此用户不需要输入它们,以便它们唯一的输入是数字。

非常感谢任何帮助!

4

2 回答 2

2

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

我用过这个免费的控件。

IP 地址控制

与该控件相关的文章:http: //www.codeproject.com/Articles/9352/AC-IP-Address-Control


好像是一个轻量级的控件,没测试过,在google上找到的! http://sanity-free.org/127/an_ipaddress_control_the_win32_sysipaddress32_control_in_csharp.html

于 2013-03-29T12:50:03.267 回答
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;
        }
    }
于 2020-04-12T18:09:36.680 回答