Используя регулярные выражения Otiels, вы можете сделать что-то вроде:
private void textBox1_TextChanged(object sender, EventArgs e)
{
string regex = "(([0-9a-zA-Z]){5}-){4}([0-9a-zA-Z]){5}";
this.textBox1.BackColor = Regex.IsMatch(this.textBox1.Text, regex) && !textBox1.Text == string.Empty ?
System.Drawing.Color.Green :
System.Drawing.Color.Red;
if (this.textBox1.Text == string.Empty)
{
this.textBox1.BackColor = System.Drawing.Color.White;
}
else
{
this.textBox1.ForeColor = System.Drawing.Color.White;
}
}
В обработчике TextBox_TextChanged (мое имя TextBox - textBox1).
Это можно легко добавить в пользовательский элемент управления - вы наследуете от TextBox, присоединяетесь к событию TextChanged и заменяете приведенный ниже код textBox1 следующим:
Таким образом, вы можете повторно использовать элемент управления.
Вы также можете добавить свойство, такое как открытая строка ValidationRegex {get; задавать; } так что вы можете передавать различные регулярные выражения и иметь возможность проверять что угодно, не только лицензионные ключи.
MaskedTextBox также является допустимым параметром, в зависимости от того, чего именно вам нужно достичь.
Обновление: приведенное выше регулярное выражение будет соответствовать строке, содержащей 5 групп, в каждой из которых по 5 символов, которые могут быть буквой (заглавными или строчными) или цифрой. Поскольку был комментарий по этому поводу, регулярное выражение должно быть изменено для размещения групп с различным количеством символов. Вот оно:
string regex = "[0-9a-zA-Z]{6}-[0-9a-zA-Z]{5}-[0-9a-zA-Z]{5}-[0-9a-zA-Z]{5}-[0-9a-zA-Z]{6}";
Это регулярное выражение (хотя и намного длиннее, чем тот, который придумал Отиелс) позволит вам контролировать количество символов в каждой группе.
Просто замените его в приведенном выше коде, и он должен работать для строки, содержащей группу из 6 символов, за которой следуют две группы по 5 символов, за которыми следует группа из 6 символов.
Кстати, это было мое первоначальное предложение (за исключением того, что в первоначальном ответе у меня было по 5 в каждом из квантификаторов), но я действительно предпочел решение Otiels, поскольку оно гораздо более элегантно для первоначальной задачи, чем мое.