IP-адрес в MaskedTextBox?

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

Ответ 1

Попробуйте следующее:

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

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

using System.Net;

Ответ 2

Гораздо проще других ответов:

Использовать 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
  • Тип анализируемого значения. Нужно, если у вас несколько MaskedTextBoxes с разными масками.

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

Ответ 3

Лучше использовать 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

Ответ 4

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

Будет отображаться следующим образом:

enter image description here

Ответ 5

До сих пор нет сложного решения. Я думаю, что ответ @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);

Ответ 6

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

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

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

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