Активизация и блокировка элементов управления

   
На этом шаге мы рассмотрим механизмы активизации и блокировки элементов управления.

   
Если функции команд меню или панелей инструментов невыполнимы, то следует сделать недоступными и
сами команды. То же относится и к элементам управления диалогового окна.

   
Сейчас с помощью диалогового окна Connect to Data Source пользователь может попытаться соединиться с
источником данных независимо от того, выбран ли какой-нибудь источник и введено ли имя пользователя. Контроль
за этой ситуацией осуществляют посредством функции проверки. Однако лучше заблокировать кнопку Connect,
пока не введена необходимая информация. В следующем примере мы увидим, как средствами функции
CWnd::EnableWindow() активизировать и заблокировать элемент управления, а также как с помощью
функции-обработчика уведомляющих сообщений обновить состояние элемента управления, когда данные диалогового
окна изменяются пользователем.

  • Активизация и блокировка кнопки Connect.
  • На вкладке Member Variables ClassWizard щёлкните идентификатор IDОК для класса
    CConnectDialog. Добавьте переменную-член класса m_bnConnect типа CButton.
  • На вкладке Member Variables ClassWizard щелкните идентификатор IDC_USERID для класса
    CConnectDialog. Добавьте переменную-член класса m_editUserID типа CEdit. Щелкните ОК,
    чтобы закрыть ClassWizard.


    Рис.1. Добавленные переменные

  • В конец функции CConnectDialog::OnSelchangeDsnlist() непосредственно перед закрывающей скобкой
    вставьте код, который активизирует кнопку Connect, если выбран источник данных и введено имя пользователя:

    char tempbuf[8];
    if (m_editUserID.GetWindowText(tempbuf, 7)) 
            m_bnConnect.EnableWindow(TRUE);
    


    Рис.2. Функция CConnectDialog::OnSelchangeDsnlist()

  • На вкладке Message Maps ClassWizard щелкните идентификатор IDC_USERID для класса
    CConnectDialog. Выберите сообщение и добавьте функцию обработки уведомляющих сообщений
    OnUpdateUserid().


    Рис.3. Задание функции OnUpdateUserid()
    Щелкните Edit Code, чтобы отредактировать функцию.

  • Добавьте следующие строки в функцию OnUpdateUserid():
      char tempbuf[8];
      if ( (m_lbDSN.GetCurSel()   != LB_ERR) && 
         (m_editUserID.GetWindowText(tempbuf, 7)) )
            m_bnConnect.EnableWindow(TRUE);
      else
            m_bnConnect.EnableWindow(FALSE);
    
  • В конец функции CConnectDialog::OnInitDialog() непосредственно перед оператором возврата вставьте
    следующую строку, обеспечивающую правильное отображение кнопки Connect при первом появлении
    диалогового окна:

      OnUpdateUserid();
    
  • Поскольку функция проверки DDV_Required() для этого поля уже не нужна, удалите саму функцию из
    файла ConnectDialog.cpp, ее объявление из файла ConnectDialog.h, а также обращение к ней в функции
    CConnectDialog::DoDataExchange() из файла ConnectDialog.cpp. Верните следующие строки в тело блока
    //{{AFX_ DATA_MАР для дальнейшего обслуживание их средствами ClassWizard (проследите, чтобы эти строки шли вместе):

      DDX_Text(pDX,   IDC_USERID,   m_strUserID); 
      DDV_MaxChars(pDX,   m_strUserID,   15);
    
  • Соберите и запустите приложение МуАрр. Убедитесь, что кнопка Connect диалогового окна
    Connect to Data Source становится активной только тогда, когда выбран источник данных и заполнено поле UserID.

   
Текст измененного приложения можно взять здесь (51,8 Кб).

   
На следующем шаге мы рассмотрим редактирование данных средствами диалогового окна.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий