Подскажите, пожалуйста, существует ли какой-нибудь стандартный (он же, поддержанный библиотеками) подход решения следующей задачи. Пытался откопать ответ в MSDN, но в результате сделал как умею.
Я считываю значение из TextBox'а (возможно нескольких)
Условия:
Проверка введенных значений на допустимость
Причем, если данные годятся, то можно нажать "OK"
В случае некорректности данных должна быть доступна кнопка "Cancel"; остальные лучше тоже недоступны, но необязательно
Я решил проблему так :
public class Form1 : System.Windows.Forms.Form
{
//...
private int ok = 0; // количество неправильных TextBox'ов
private bool prevState; // устанавливается при входе в конкретный TextBox
//...
private void textBox1_Enter(object sender, System.EventArgs e)
{
TextBox tb = (TextBox) sender;
prevState = (tb.Text == "ok");
}
private void textBox1_TextChanged(object sender, System.EventArgs e)
{
TextBox tb = (TextBox) sender;
// проверка корректности ввода
bool currState = (tb.Text == "ok");
if (currState != prevState)
{
if (currState)
ok--;
else
ok++;
prevState = currState;
btnOK.Enabled = (ok == 0);
}
}
private void Form1_Activated(object sender, System.EventArgs e)
{
ok = 0; // считаем, что данные по умолчанию на форме корректны
}
Но был и другой вариант (на мой взгляд, более красивый):
Обработать событие Validating. Если TextBox.Text не годится, то установить свойство в CancelEventArgs
e.Cancel = true,
но проблема в том, что тогда все другие элементы управления на форме становятся недоступными (само по себе даже хорошо), в том числе и кнопка Cancel. Так вот, как сделать так, чтобы "Cancel" была доступна, все остальные элементы недоступны, пока не исправлено значение в поле, и при этом не использовать дополнительных переменных?
С уважением,
Константин Дурыничев.
22.12.03 18:05: Перенесено модератором из '.NET' — AVK