Удаление пробелов в MaskedTextBox при событии Leave - проверка IP-адреса - PullRequest
0 голосов
/ 06 января 2020

Я пытаюсь выполнить проверку IPv4 в maskedtextbox. Моя маска установлена ​​на ###. ###. ###. ###, и у меня есть событие Key Down, обрабатывающее '.' ключ как переход к следующему октету, который прекрасно работает ... Однако, если в IP-адресе нет 3 цифр в каждом октете, я получаю случайные пробелы, когда беру текстовое поле для использования.

Например: если я наберу 72.13.12.1, вывод будет "72 .13 .12 .1" <- я не хочу пробелов. </p>

Я попытался выполнить некоторую проверку как удаление пробелов, как только я покидаю текстовое поле maskedtextbox, но если я удаляю пробелы, моя маска возвращается в исходное состояние и заменяет ее на «721.321.1.»

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;
            }
        }

1 Ответ

0 голосов
/ 07 января 2020

@ madreflection Я наконец-то получил IPAddressCrontrolLib для работы. Я просто использовал исходные файлы и таким образом встроил библиотеку. Пришлось немного подурачиться, чтобы очистить все ошибки, которые у нас есть. Все хорошо сейчас! Просто нужен новый день, чтобы пройти через это. Спасибо за вашу помощь.

...