C# 休假时删除MaskedTextBox中的空格事件-IP地址验证

C# 休假时删除MaskedTextBox中的空格事件-IP地址验证,c#,validation,ip-address,keypress,maskedtextbox,C#,Validation,Ip Address,Keypress,Maskedtextbox,我试图在一个屏蔽文本框中进行IPv4验证。我的掩码设置为##################################并且。。。然而,如果一个IP地址的每个八位字节中没有3个数字,那么当我抓取文本字段以供使用时,我会得到随机空格 例如:如果我键入72.13.12.1,则输出为“72.13.12.1”=I) nextField=i; } nextField+=1; //完成后,再次启用TabStop属性 如果(位置==nextField) 蒙面ExtBoxexternip_离开(本,e);

我试图在一个屏蔽文本框中进行IPv4验证。我的掩码设置为##################################并且。。。然而,如果一个IP地址的每个八位字节中没有3个数字,那么当我抓取文本字段以供使用时,我会得到随机空格

例如:如果我键入72.13.12.1,则输出为“72.13.12.1”=I) nextField=i; } nextField+=1; //完成后,再次启用TabStop属性 如果(位置==nextField) 蒙面ExtBoxexternip_离开(本,e); maskedTextBoxExternIP.SelectionStart=nextField; } }
@madreflection我终于开始工作了,我只是使用了源文件并以这种方式嵌入了库。我们不得不做一些推诿,以清除我们在那里发现的所有错误。现在一切都好了!只是需要新的一天来度过这一天。感谢您的帮助。

Windows通用控件库包括和IP地址控件,但没有WinForms版本。看看是否有帮助。我以前使用过这个,但我不希望我的.exe依赖于DLL。对此有什么办法吗?您可以使用ILMerge将其与应用程序结合起来。您到底关心什么?您的可执行文件中有另一个DLL文件吗?取决于您没有编写的内容?问题在于将其存储在机器上。我希望能够将可执行文件部署到其他PC,而不必映射DLL或将其放在文件夹中。谢谢。我提到了源代码,但删除了评论。所以我不想建议做一些可能违反它附带的许可证的事情。
this.maskedTextBoxExternIP.ResetOnSpace = false;
this.maskedTextBoxExternIP.SkipLiterals = false;
this.maskedTextBoxExternIP.PromptChar = ' ';
this.maskedTextBoxExternIP.Mask = "###.###.###.###";
this.maskedTextBoxExternIP.ValidatingType = typeof(System.Net.IPAddress);
this.maskedTextBoxExternIP.KeyDown += new KeyEventHandler(this.maskedTextBoxExternIP_KeyDown);
this.maskedTextBoxExternIP.Enter += new EventHandler(this.maskedTextBoxExternIP_Enter);
this.maskedTextBoxExternIP.Leave += new EventHandler(this.maskedTextBoxExternIP_Leave);

        private void maskedTextBoxExternIP_Leave(object sender, EventArgs e)
        {
            // Resets the cursor when we leave the textbox  
            maskedTextBoxExternIP.SelectionStart = 0;
            // Enable the TabStop property so we can cycle through the form controls again  
            foreach (Control c in this.Controls)
                c.TabStop = true;
            IPAddress ipAddress;
            if (IPAddress.TryParse(maskedTextBoxExternIP.Text, out ipAddress))
            {
                //valid ip
            }
            else
            {
                //is not valid ip
                maskedTextBoxExternIP.Text = maskedTextBoxExternIP.Text.Replace(" ", string.Empty);
            }
        }
        // Handle the Enter event  
        private void maskedTextBoxExternIP_Enter(object sender, EventArgs e)
        {
            // Resets the cursor when we enter the textbox  
            maskedTextBoxExternIP.SelectionStart = 0;
            // Disable the TabStop property to prevent the form and its controls to catch the Tab key  
            foreach (Control c in this.Controls)
                c.TabStop = false;
        }
        // Handle the KeyDown event  
        private void maskedTextBoxExternIP_KeyDown(object sender, KeyEventArgs e)
        {
            // Cycle through the mask fields  
            if (e.KeyCode == Keys.Tab || e.KeyCode == Keys.OemPeriod || e.KeyCode == Keys.Decimal)
            {
                int pos = maskedTextBoxExternIP.SelectionStart;
                int max = (maskedTextBoxExternIP.MaskedTextProvider.Length - maskedTextBoxExternIP.MaskedTextProvider.EditPositionCount);
                int nextField = 0;

                for (int i = 0; i < maskedTextBoxExternIP.MaskedTextProvider.Length; i++)
                {
                    if (!maskedTextBoxExternIP.MaskedTextProvider.IsEditPosition(i) && (pos + max) >= i)
                        nextField = i;
                }
                nextField += 1;

                // We're done, enable the TabStop property again  
                if (pos == nextField)
                    maskedTextBoxExternIP_Leave(this, e);

                maskedTextBoxExternIP.SelectionStart = nextField;
            }
        }