文本框仅允许文本框中的IP地址c#

问题描述 投票:0回答:3

我正在尝试使文本框仅允许 IP 地址,而不使用互联网进行验证。我将有一个“private void textBox3_TextChanged”或“timer1_Tick”来完成这项工作。每次我输入或打勾时,它都会检查它是否有效。这就是为什么我希望它很快,并且只使用简单的本地代码来检查它是否有效,即 0.0.0.0 - 255.255.255.255。

首先,它不应该执行任何操作,但是当写入 ip 时,它将启动一个计时器,然后检查 ip 是否可达。这样做的目的是,当IP写入后,如果大约4秒后无法访问ip,则图片框将变为红色,如果可以访问,它将变为绿色,然后停止直到“textbox3_TextChanged”

我尝试了 ping 之类的东西,但如果没有输入任何内容,它就会崩溃,如果 ip 无法访问,它就会滞后:

private void timer1_Tick(object sender, EventArgs e)
    {
        Ping pingSender = new Ping();
        PingOptions options = new PingOptions();

        options.DontFragment = false;


        // Create a buffer of 32 bytes of data to be transmitted.
        string data = "ping";
        byte[] buffer = Encoding.ASCII.GetBytes(data);
        int timeout = 120;
        PingReply reply = pingSender.Send(textBox3.Text, timeout, buffer, options);
        if (reply.Status == IPStatus.Success)
        {
            pictureBox4.BackColor = Color.LimeGreen;
        }
        else
            pictureBox4.BackColor = Color.Red;
    }

这是截图:https://i.sstatic.net/yF7LK.jpg

请帮忙:)

c# textbox ip
3个回答
1
投票

你可以尝试用这样的东西替换

textbox3_TextChanged

(在这个例子中,我的界面有一个名为

textBox
的 TextBox 和一个名为
textBlock
的 TextBlock)

//async to not freeze the UI
private async void TextBox_OnTextChanged(object sender, TextChangedEventArgs e)
{
    Ping pingSender = new Ping();
    var tb = (TextBox)sender;

    //a little regex to check if the texbox contains a valid ip adress (ipv4 only).
    //This way you limit the number of useless calls to ping.
    Regex rgx = new Regex(@"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$");
    if (rgx.IsMatch(tb.Text))
    {
        int timeout = 120;
        try
        {
            var reply = await pingSender.SendPingAsync(tb.Text, timeout);
            textBlock.Text = reply.Status == IPStatus.Success ? "OK" : "KO";
        }          
        catch (Exception ex) when (ex is TimeoutException || ex is PingException)
        {
            textBlock.Text = "KO";
        }
    }
    else
    {
        if (textBlock != null)
        {
            textBlock.Text = "Not valid ip";
        }
    }
}

0
投票
   private void TxtEthStaticIP_Leave(object sender, EventArgs e)
        {
            Regex regex = new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
            Match match = regex.Match(TxtEthStaticIP.Text);
            if (match.Success == false)
            {
                TxtEthStaticIP.Text = approvedethernetip;
            }
            else
            {
                approvedethernetip = TxtEthStaticIP.Text;
            }
        }

这是让文本框像这样工作的另一个想法。您必须为默认文本声明一个批准的字符串,这可能会对某些类似这样的情况有所帮助。

更好的解决方案可能是 TextBox 的 Validation 和 Validated 事件


0
投票

我能够使用三个函数检查 maskedtextbox 值。事实上,我为每个 IP 设置了 4 个 maskedtextbox,以便用户认为他正在文本框中输入 IP,并且我为每个文本框使用了以下函数。

public void Fanction_mouse_click(MaskedTextBox txt_name)
    {

        txt_name.SelectionStart = 0;
    }
    public void Fanction_KeyUp(MaskedTextBox txt_name, MaskedTextBox next_txtbox)
    {

        if (txt_name.Text.Trim() != "")
        {


            if (Convert.ToInt32(txt_name.Text.Trim().ToString()) > 255)
            {

                txt_name.Text = txt_name.Text.Remove(txt_name.TextLength - 1, 1);
            }
            if (Convert.ToInt32(txt_name.Text.Trim().ToString()) < 256 && Convert.ToInt32(txt_name.Text.Trim().ToString()) > 99)
            {
                next_txtbox.Select();
            }
        }
         if (txt_name.Text.StartsWith("0")&& txt_name.Text.Length>1) {
            txt_name.Text = txt_name.Text.Remove(0, 1);
        }
    }
    public void Fanction_KeyPress(MaskedTextBox txt_name,string press, MaskedTextBox next_txtbox)
    {

        if (press == "."&& txt_name.Text.Trim()!="")
        {
            next_txtbox.Select();

    
        }
    }

4 个蒙版文本框的图片

© www.soinside.com 2019 - 2024. All rights reserved.