#c# #textbox
#c# #текстовое поле
Вопрос:
Я не уверен, что использую неправильную терминологию, так что, возможно, именно поэтому мой поиск ничего не дал.
У меня есть куча текстовых полей, которые я хочу проверить и убедиться, что они не содержат апостроф. Код, который у меня есть, является:
public void apostropheCheck(TextBox fieldName)
{
Match m = Regex.Match(fieldName.Text, @"'");
if (m.Success)
{
validationErrorProvider.SetError(fieldName, "Field can not contain apostrophes");
}
else if (!m.Success)
{
validationErrorProvider.SetError(fieldName, "");
}
}
и проверка текстового поля является:
private void FirstNameTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
//Checks for apostrophes
apostropheCheck(FirstNameTextBox);
}
Однако, когда я запускаю это, значение, которое передается в пустоту, является текстом, который находится в текстовом поле (например, ‘Джон’ или ‘Мэри’) Я мог бы заставить это работать, просто используя код, который находится в void для каждого события проверки, но это часто повторялось бы. Есть ли способ лучше?
Комментарии:
1. Не могли бы вы перефразировать, что вы подразумеваете под «передачей в пустоту»? Это действительно не имеет для меня никакого смысла, и я не вижу никакого другого способа интерпретировать то, что вы имеете в виду, который мог бы иметь смысл.
2. Я думаю, вы, возможно, перепутали свои термины. Пустота — это тип. Не имеет смысла передавать в него что-либо. Возможно, вы имеете в виду функцию? В этом случае вы упоминаете две такие функции в своем сообщении. На какое из них вы ссылаетесь?
3. То, что вы вызываете,
void
на самом деле называетсяmethod
.void
указывает только на то, чтоmethod
не возвращает никакого значения.4. Спасибо всем, кто исправил мою терминологию (я только учусь, и хотя я знаю, что я хочу сделать, я не всегда знаю, как это называется или как это выразить.)
Ответ №1:
Вы можете иметь один общий обработчик и использовать его для Validating
события всех текстовых полей.
private void CommonTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
//Checks for apostrophes
apostropheCheck((TextBox)sender);
}
Ответ №2:
Объектом-отправителем события является текстовое поле, поэтому вы можете преобразовать его в текстовое поле и повторить один и тот же обработчик события для всех текстовых полей в вашем приложении
private void FirstNameTextBox_Validating(object sender, System.ComponentModel.CancelEventArgs e)
{
apostropheCheck(((TextBox)sender).Text);
}
Комментарии:
1. Большое вам спасибо, я думаю, что в данном случае это тот ответ, который мне был нужен, хотя наличие одного события проверки является хорошей идеей, некоторые текстовые поля сначала проверяются для других объектов и проверяются на наличие апострофов только в том случае, если с другими объектами нет ошибок (и если проверка апострофа выполняется второй раз, это приведет к удалению ошибки из первого и наоборот).
Ответ №3:
-
Терминология: вы ссылаетесь на свою функцию
apostropheCheck
как на void, который является ее типом возвращаемого значения. Стандартным способом является использование имени функции apostropheCheck. -
Все ваши текстовые поля могут быть проверены с использованием одной и той же функции, если вы замените имя текстового поля в коде на sender ex.
private void FirstNameTextBox_Validating(отправитель объекта, система.ComponentModel.CancelEventArgs e) { //Проверяет наличие апострофов Проверка апострофирования(отправителя текстового поля); }