Как я могу использовать MaskedTextBox, чтобы запретить пользователю вводить неверный IP-адрес? (Я хочу, чтобы он вел себя так же, как Windows).
IP-адрес в MaskedTextBox?
Ответ 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
Установите маску: ###.###.###.###
Будет отображаться следующим образом:
Ответ 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
(Я не знаю, считается ли это самовольным продвижением, но с открытым исходным кодом, поэтому я считаю, что это нормально.)