Красивая проверка правильности введенных данных в C#
От: kinstintin  
Дата: 22.03.03 17:50
Оценка:
Подскажите, пожалуйста, существует ли какой-нибудь стандартный (он же, поддержанный библиотеками) подход решения следующей задачи. Пытался откопать ответ в 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
Re: Красивая проверка правильности введенных данных в C#
От: der Igel Россия  
Дата: 22.03.03 19:16
Оценка: 23 (3)
Hello, kinstintin!

k> Но был и другой вариант (на мой взгляд, более красивый):

k> Обработать событие Validating. Если TextBox.Text не годится, то
k> установить свойство в CancelEventArgs e.Cancel = true,
k> но проблема в том, что тогда все другие элементы управления на форме
k> становятся недоступными (само по себе даже хорошо), в том числе и кнопка
k> Cancel. Так вот, как сделать так, чтобы "Cancel" была доступна, все
k> остальные элементы недоступны, пока не исправлено значение в поле, и при
k> этом не использовать дополнительных переменных?
k> С уважением, Константин Дурыничев.

Совйство CausesValidation у кнопки Cancel выставить в false.
Posted via RSDN NNTP Server 1.5 beta
Re[2]: Красивая проверка правильности введенных данных в C#
От: kinstintin  
Дата: 23.03.03 00:13
Оценка:
Здравствуйте, der Igel, Вы писали:

DI>Совйство CausesValidation у кнопки Cancel выставить в false.


Спасибо Чувствовал ведь, что просто

С уважением,
Константин Дурыничев.
Re[3]: Красивая проверка равильности введенных данных в C#
От: der Igel Россия  
Дата: 23.03.03 08:59
Оценка:
Hello, kinstintin!

k> Спасибо Чувствовал ведь, что просто


У нас тут кнопочка 'оценить' есть. Пользуйся.
Posted via RSDN NNTP Server 1.5 beta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.