Подтвердить форму в C#
Пример объясняет, как вы можете использовать обработчик событий Validating, чтобы проверить значение поля, когда фокус покидает это поле. Если значение поля недействительно, программа может отображать сообщение, помечать ошибку (возможно, с помощью компонента ErrorProvider) и установить e.Cancel = true, чтобы предотвратить фокус с оставляя поле.
К сожалению, этот метод имеет несколько недостатков. Сначала он перехватывает пользователя в поле до тех пор, пока значение не будет действительным. Если пользователь еще не знает допустимого значения, это предотвращает преждевременное заполнение других полей, и это может расстраивать.
Очень опытные пользователи также часто набирают «головы вниз», не глядя на форму. В этом случае пользователь может не заметить ошибку до конца и может продолжать вводить больше значений в недопустимое поле.
Очень опытные пользователи также часто набирают «головы вниз», не глядя на форму. В этом случае пользователь может не заметить ошибку до конца и может продолжать вводить больше значений в недопустимое поле.
...
Этот пример демонстрирует лучшее решение. Он использует Validating обработчики событий для отметки недопустимых полей, но не устанавливает e.Cancel в true, чтобы пользователь мог оставить неправильные поля. Позже, когда пользователь нажимает кнопку «ОК», форма проверяет поля, чтобы убедиться, что они недействительны.
Дополнительную информацию об использовании событий Validating см. в предыдущем примере. Следующий код показывает, как кнопка OK проверяет все поля примера.
// Пользователь принял значения.
private void btnOk_Click(object sender, EventArgs e)
{
// Проверяем все поля.
ValidateRequiredField(errField, txtFirstName);
ValidateRequiredField(errField, txtLastName);
ValidateRequiredField(errField, txtStreet);
ValidateRequiredField(errField, txtCity);
ValidateRequiredField(errField, txtState);
ValidateZipCode(errField, txtZip);
// Смотрите, есть ли в поле сообщение об ошибке.
foreach (Control ctl in Controls)
{
if (errField.GetError(ctl) != "")
{
MessageBox.Show(errField.GetError(ctl));
return;
}
}
MessageBox.Show("You entered:\n" +
txtFirstName.Text + ' ' + txtLastName.Text + '\n' +
txtStreet.Name + '\n' +
txtCity.Name + '\t' + txtState.Text + '\t' + txtZip.Text);
}
Этот код сначала вызывает методы проверки для проверки всех TextBox es.
Затем он проходит через каждый элемент управления в форме. Для каждого элемента управления код использует метод ErrorProvider объекта GetError для получения ошибки, связанной с этим элементом управления. Если какой-либо элемент управления имеет непустое сообщение об ошибке, программа отображает его в окне сообщения и выходит из обработчика событий.
Если ни один из элементов управления не имеет сообщения об ошибке, программа отображает введенные значения.
