Передача текстового поля в пустоту

#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:

  1. Терминология: вы ссылаетесь на свою функцию apostropheCheck как на void, который является ее типом возвращаемого значения. Стандартным способом является использование имени функции apostropheCheck.

  2. Все ваши текстовые поля могут быть проверены с использованием одной и той же функции, если вы замените имя текстового поля в коде на sender ex.

 private void FirstNameTextBox_Validating(отправитель объекта, система.ComponentModel.CancelEventArgs e)
 {
 //Проверяет наличие апострофов 
Проверка апострофирования(отправителя текстового поля); 
 }