IP-адрес в MaskedTextBox?

Как я могу использовать MaskedTextBox, чтобы предотвратить ввод пользователем недопустимого IP-адреса? (Я хочу, чтобы он вел себя так же, как и Windows).

6 ответов


попробуйте это:

IPAddress ipAddress;
if (IPAddress.TryParse(maskedTextBoxY.Text, out ipAddress))
{
    //valid ip
 }
else
 {
    //is not valid ip
}

Примечание: чтобы использовать его, вам нужно импортировать System.Net пространство имен:

using System.Net;

гораздо проще, чем другие ответы:

Использовать Систему.Сеть.IPAddress и система.Окна.Формы.Элемент управления maskedtextbox

задайте следующие свойства MaskedTextBox:

MaskedTextBox.Mask = ###.###.###.###
MaskedTextBox.ValidatingType = typeof(System.Net.IPAddress);

всякий раз, когда текстовое поле проверяет, событие MaskedTextBox.TypeValidationCompleted поднимается. Аргументы события показывают следующее:

  • - это печатный текст приемлем как IP-адрес? (=does System.Сеть.IPAddress.Tryparse возвращение ok)
  • описание ошибки в виде строки
  • проанализированное значение (=объект системы.Сеть.IpAddress
  • тип анализируемого значения. Необходимо, если у вас есть несколько MaskedTextBoxes с разными масками

после получения этого события вы можете решить, использовать ли значение или уведомить пользователя, что не так со значением.


лучше использовать регулярное выражение для проверки ввода пользователем. Вот пример:

         string pattern = @"\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b";

        string ip1 = "192.168.0.1";
        string ip2 = "302.0.0.1";

        Regex.IsMatch(ip1, pattern); // returns true
        Regex.IsMatch(ip2, pattern); // returns false

установите маску в: ###.###.###.###

будет выглядеть так:

enter image description here


сложного решения этого вопроса пока нет. Я думаю, что ответ @HaraldDutch ближе всего, но он не prevet от ввода с пробелом. Используя дополнительную инструкцию:

IPAdressBox.ResetOnSpace = false;

генералы решена проблема, но сложнее-реализовать собственные данные типас метод Parse.

            public class IPValidator
            {
                public static IPValidator Parse(string input)
                {
                    Regex regexpr = new Regex(@" ");
                    Match match = regexpr.Match(input);
                    if (match.Success)
                        return new IPValidator();
                    else throw new ArgumentException(input);
                }
            }

где regexpr-конкретное выражение для проверки IP. После этого его можно использовать как ValidatingType:

 IPAdressBox.ValidatingType = typeof(IPValidator);

Я сделал IP-маскированное текстовое поле, которое имитирует Windows.

имеет такую же ширину, высоту, предотвращает потребителей от входа > 255 значений, коробок скачков, ЕТК, ЕТК... Если вы все еще нуждаетесь в нем и хотите попробовать его, он здесь:

https://github.com/RuvenSalamon/IP-MaskedTextBox

(Я не знаю, считается ли это саморекламой, но это открытый исходный код, поэтому я считаю, что все в порядке.)