Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3490 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Лекция 13:

Проектирование интерфейса. Диалоговые окна

Использование Me в качестве имени текущего диалогового окна

Для упрощения написания кода процедур VBA позволяет в качестве имени текущего диалогового окна применять ключевое слово Me (это похоже на использование указателя текущего объекта This в С++). В частности, в предыдущем примере вместо оператора:

With frmInit

можно было использовать:

With Me

Модификация управляющих элементов во время работы

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

Public Sub ChangeForm()
	With Me
		.MyText.Text = "Нелюбимый цвет:"  'новый текст в редакторе
		.lstColors.ListIndex = 1	  'черный
		.chkGood.Value = False	          'отключение флажка
	End With

End Sub

Благодаря возможности подобных изменений система может гибко реагировать на действия пользователя и использовать одно диалоговое окно для решения нескольких связанных или однотипных задач.

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

Все элементы управления обладают свойством 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. Окно сообщений о выполняемых проверках
полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.