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