Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SrrazOffpril_Vecher.rtf
Скачиваний:
9
Добавлен:
18.09.2019
Размер:
1.9 Mб
Скачать

5.2. Использование нестандартных диалоговых окон

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

Для тестирования нестандартного диалогового окна необходимо выбрать в меню Run (Запуск) в редакторе Visual Basic команду Run Sub/UserForm (Запуск подпрограммы/UserForm). Чтобы вывести диалоговое окно на экран при выполнении программы, следует использовать метод Show. Например:

UserForm1.Show

5.2.1. Получение и установка значений свойств в период выполнения

Чтобы установить начальное значение, или значение по умолчанию (default value), которое будет у элемента управления при каждом открытии содержащего его диалогового окна, необходимо добавить нужный код в процедуру обработки события Initialize формы UserForm, включающей этот элемент. При отображении диалогового окна возникнет событие Initialize, и будет вызвана процедура его обработки – а значит, и код, указывающий значение для элемента управления. Например, если создана новая UserForm (форма), переименованная в свойстве Name как frmPhoneOrders с добавленными в нее элементами управления TextBox (поле – txtCustomerName), ListBox (список – lstRegions) и CheckBox (флажок – chkSendExpress), то для установки начальных значений данных элементов управления необходимо добавить в процедуру UserForm_Initialize следующий код:

Private Sub UserForm_Initialize()

With frmPhoneOrders

‘текст по умолчанию

.txtCustomerName.Text = “Grant Clarridge”

.chkSendExpress.Value = True флажок изначально активен

With .lstRegions

.AddItem “North” ‘эти строки заполняют список

.AddItem “South”

.AddItem “West”

.AddItem “East”

.ListIndex = 3 ‘выбираем четвертый элемент списка

End With

End With

End Sub

Элементы наборов в иерархии объектов Microsoft Excel, Word и PowerPoint нумеруются с 1, а элементы массивов и наборов, связанных с формами, - с 0. Именно поэтому для выбора четвертого элемента из списка в предыдущем примере свойству ListIndex присвоено значение 3.

В предыдущем примере вместо кодового имени формы UserForm можно подставить ключевое слово Me, и тем самым заменить оператор With frmPhoneOrders на With Me. Ключевое слово Me, используемое в коде для UserForm или элементов управления на форме, представляет саму UserForm. Это позволяет присваивать элементам управления длинные имена и в то же время поддерживать компактность строк кода.

Если при каждом выводе диалогового окна нужны разные начальные значения элемента управления, то это можно сделать программно перед отображением окна.

Можно изменять свойства элементов управления и UserForm и применять их методы даже в тот момент, когда диалоговое окно отрыто. Пример, значение свойства Text поля TextBox1 меняется на «Hello»:

TextBox1.Text = “Hello”

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

Свойство Enabled позволяет включать элемент управления при выполнении указанных условий. Эту возможность часто используют в процедурах обработки событий для полей, чтобы включать кнопку Ok, только когда будет введено значение, соответствующее стандартному шаблону, или когда набор (Frame) переключателей (OptionButton) должен быть доступен лишь при активизации определенного флажка (CheckBox):

Private Sub CheckBox1_Change()

With Me

If .CheckBox1.Value = True Then

.OptionButton1.Enabled = False

.OptionButton2.Enabled = False

Else

.OptionButton1.Enabled = True

.OptionButton2.Enabled = True

End If

End With

End Sub

Элемент управления TabStrip (Набор вкладок) позволяет отображать разные наборы данных с помощью одного и того же набора элементов управления диалогового окна. Например, чтобы в области диалогового окна показывать адреса группы людей, можно создать элемент управления TabStrip и добавить элементы, которые будут содержать имя и адрес каждого лица в группе. Затем добавить «ярлычок» по каждому члену группы в элемент управления TabStrip и написать код, который при щелчке ярлычка отображает сопоставленные с ним данные. В следующем примере значение элемента TextBox1 изменяется в зависимости от того, какой ярлычок элемента TabStrip1 активен. Индекс выбранного ярлычка передается в процедуру обработки события:

Private Sub TabStrip1_Click(ByVal Index As Long)

If Index = 0 Then

Me.TextBox1.Text = “7710 Betty Jane Lane”

ElseIf Index = 1 Then

Me.TextBox1.Text = “9523 15th Ave NE”

End If

End Sub

Для проверки данных перед закрытием диалогового окна необходимо включить соответствующий код в процедуру выгрузки диалогового окна. Если элемент управления содержит некорректные данные, используется оператор Exit Sub для выхода из процедуры до выполнения оператора Unload.

Данные, введенные пользователем в диалоговое окно, теряются при закрытии окна. Взяв значения элементов управления в UserForm после выгрузки формы, присваиваются начальные данные, а не те, что введены пользователем. Если необходимо сохранить данных, необходимо записать их в переменные уровня модуля в тот период, когда диалоговое окно еще открыто. Пример:

код в модуле, который объявляет общие данные

Public strRegion As String

Public intSalesPersonID As Integer

Public blnCancelled As Boolean

код в форме

Private Sub cmdCancel_Click()

Module1.blnCancelled = True

Unload Me

End Sub

Private Sub cmdOk_Click()

сохраняем данные

intSalesPersonID = txtSalesPersonID.Text

strRegion = lstRegions.List(lstRegions.ListIndex)

Module1.blnCancelled = False

Unload Me

End Sub

Private Sub UserForm_Initialize()

Module1.blnCancelled = True

End Sub

код в модуле для вывода диалогового окна

Sub LaunchSalesPersonForm()

frmSalesPeople.Show

If blnCancelled = True Then

MsgBox “Operation cancelled!”, vbExclamation

Else

MsgBox “The Salesperson’s ID is:” & _

intSalesPersonID & _

“The Region is:” & strRegion

End If

End Sub

5.2.2. Закрытие нестандартного диалогового окна

Нестандартные диалоговые окна всегда открываются как модальные, т.е. перед возвратом в документ пользователь должен закрыть окно. Для этого в диалоговом окне обычно предусматривают соответствующую кнопку. Чтобы выгрузить UserForm, используется оператор Unload.

Private Sub cmdOK_Click()

ActiveDocument.InsertAfter txtUserName.Text

Unload UserForm1

End Sub

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]