IP-адрес в MaskedTextBox? - PullRequest
       21

IP-адрес в MaskedTextBox?

10 голосов
/ 28 октября 2011

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

Ответы [ 6 ]

16 голосов
/ 23 сентября 2013

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

Использовать System.Net.IPAddress и System.Windows.Forms.MaskedTextBox

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

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

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

  • Допустим ли напечатанный текст в качестве IP-адреса? (= System.Net.IPAddress.TryParse возвращает нормально)
  • Описание ошибки в виде строки
  • Анализируемое значение (= объект System.NET.IpAddress
  • Тип проанализированного значения. Требуется, если у вас есть несколько MaskedTextBox с разными масками

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

16 голосов
/ 28 октября 2011

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

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

примечание: для его использования необходимо импортировать пространство имен System.Net:

using System.Net;
4 голосов
/ 28 октября 2011

Лучше использовать REGEX для проверки ввода пользователя. Вот пример:

         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
1 голос
/ 20 апреля 2016

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

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

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

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

1 голос
/ 04 мая 2015

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

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);
1 голос
/ 28 октября 2011

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

Будет отображаться так:

enter image description here

...