Основы офисного программирования и язык VBA

       

Управление доступом к элементу


Все элементы управления обладают свойством Enabled (Доступен), позволяющим управлять их доступностью. В результате действий пользователя или системы доступный элемент может стать активным - получить фокус клавиатуры. Если свойству Enabled присвоить False, элемент управления становится недоступен ("сереет") и не может попасть в фокус. Управление доступностью производится динамически и зависит от задач, решаемых в диалоговом окне. Типичный случай - запрет на доступ к окну поля ввода (TextBox) после того, как система поместила в него данные, которые не должны далее изменяться пользователем (например, текст справки, которую можно только прочесть и распечатать). Другой случай - отключение/включение доступа к группам переключателей или кнопок зависимого выбора (OptionButton) или отдельным таким кнопкам в зависимости от состояния флажка (CheckBox). При этом действия по изменению доступа надо проводить в процедуре, обрабатывающей событие Change (Изменение), автоматически вызываемой в тот момент, когда флажок меняет свое состояние, т. е. становится неотмеченным или отмеченным.

Выполните следующие действия:

  1. Создайте новое диалоговое окно (UserForm) и включите в него флажок (CheckBox), управляющий элемент Frame (Рамка), и командную кнопку (ComandButton). Поместите в рамку еще 4 флажка (CheckBox). Заголовки управляющих элементов (значения свойства Caption ) задайте как на рисунке:


    Рис. 12.15.  Окно "Пример управления доступом"

  2. Дважды щелкните верхний флажок, чтобы вывести окно с кодом процедур, выберите в списке объектов слева вверху CheckBox1 (это имя присвоила флажку система), затем в списке процедур обработки событий справа вверху щелкните событие Change. Дополните появившуюся заготовку процедуры CheckBox1_Change:

    Private Sub CheckBox1_Change() With Me If.CheckBox1.Value Then 'отключение опций .CheckBox4.Enabled = False .CheckBox5.Enabled = False Else 'включение опций .CheckBox4.Enabled = True .CheckBox5.Enabled = True End If End With

    End Sub


  3. Создайте стандартный модуль и напишите в нем две процедуры:

    Public Sub CheckOptions() ' Проверка на дорогах Dim Msg As String Msg = "Выполняю проверку на " With frmChecking

    If.CheckBox2.Value Then Msg = Msg & vbCrLf & "корректность дат" If.CheckBox3.Value Then Msg = Msg & vbCrLf & "согласованность данных" If.CheckBox4.Value Then Msg = Msg & vbCrLf & "правильность расходов" If.CheckBox5.Value Then Msg = Msg & vbCrLf & "правильность доходов" MsgBox (Msg) .Hide End With End Sub

    Public Sub SetOptions() frmChecking.Show End Sub

    Процедура SetOptions открывает нашу форму, предоставляя пользователю возможность включать или выключать те или иные флажки. Установив нужные значения, он может затем щелкнуть кнопку "Проверка". Обработчик этого события будет вызывать функцию CheckOptions, которая и производит проверку состояния каждого из четырех флажков группы. Заметьте, что проверка свойства Value не зависит от состояния свойства Enabled. Если даже флажок недоступен, но включен (Value = True), то появится сообщение о выполнении проверки. Недоступный флажок не позволяет пользователю изменить его состояние, но программно ѕ все в Ваших руках. Сделаем еще одно замечание. Реально, верхний флажок, управляющий проверкой, должен находиться в другой форме, более высокого уровня, но мы уже не стали усложнять задачу.
  4. Напишите обработчик события командной кнопки:

    Private Sub CommandButton1_Click() CheckOptions End Sub

  5. Теперь, если выполнить процедуру SetOptions, (по правилам, ее следовало бы вызывать в одном из обработчиков событий), то на экране появится форма. В ней можно установить флажки, например, следующим образом:


    Рис. 12.16.  Окно проверки в процессе работы

  6. Если в этом состоянии окна щелкнуть командную кнопку "Проверка", то будет выведено сообщение о двух выполняемых проверках:


    Рис. 12.17.  Окно сообщений о выполняемых проверках




Содержание раздела