Определение выбранного элемента

Для того чтобы узнать, какой элемент списка выбрал пользователь, воспользуемся свойством Value:

Private Sub cmdOK_Click()

Dim Кафедра As String

Кафедра = cboКафедра.Value

MsgBox "Выбрана кафедра " & Кафедра & "!", _

vbInformation, "Сообщение"

Unload Me

End Sub

Задание:

В модуле формы frmКафедра наберите и протестируйте эту программу.

Создание взаимосвязанных элементов управления

Предположим, что нам надо создать форму, которая позволяла бы осуществлять выбор преподавателей любой кафедры[11] (Рис. 10‑11):

Рис. 10‑11. Пример формы с взаимосвязанными списками

ТРЕБУЕТСЯ:

1. Создать форму Институт (выполните самостоятельно!) и написать программу инициализации формы, в которой список кафедр и преподавателей формируются на основе данных, расположенных в первом столбце на листе Кадры в книге C:\St\Институт.xls (Рис. 10‑10).

2. Поле со списком Выберите кафедру и список Укажите преподавателей организовать как взаимосвязанные списки. Это значит, что при выборе пользователем какой-то кафедры должен автоматически формироваться список преподавателей этой кафедры.

Начальные условия

1) при создании формы присвойте следующие имена элементам управления:

­ кнопке ОК – cmdOK

­ кнопке Отмена – cmdОтмена

­ полю со списком – cboКафедра

­ списку –lstСотрудник

2) саму форму назовите frmИнститут.

ВЫПОЛНЕНИЕ ЗАДАНИЯ:

1.После того как форма создана, в Модуль10 наберите следующий код:

Sub ВзаимосвязанныеСписки()

' 1. Объявляем переменные и массивы:

Dim Кафедры() As String

Dim Кафедра As String

Dim НомерСтроки As Integer

Dim КолСотрудников As Integer

Dim КолКафедр As Integer

'2. Проверяем существование книги C:\St\Институт.xls

Call НаличиеКниги("C:\St\Институт.xls")

If flagНаличие = 0 Then Exit Sub

'3. Проверяем существование листа Кадры

Call НаличиеЛиста("Кадры")

If flag = 0 Then Exit Sub

'4. Формируем список кафедр:

НомерСтроки = 3

Do While Trim(Cells(НомерСтроки, 1).Value) <> ""

НомерСтроки = НомерСтроки + 1

Loop

КолКафедр = 1 'кол-во кафедр

ReDim Preserve Кафедры(КолКафедр) As String

Кафедры(КолКафедр) = Trim(Cells(3, 1).Value)

For i = 3 To НомерСтроки - 1

If Trim(Cells(i + 1, 1).Value) <> "" Then

Кафедра = Trim(Cells(i + 1, 1).Value)

For j = 1 To КолКафедр

If Кафедра = Кафедры(j) Then GoTo n3

Next j

КолКафедр = КолКафедр + 1

ReDim Preserve Кафедры(КолКафедр) As String

Кафедры(КолКафедр) = Trim(Cells(i + 1, 1).Value)

End If

n3: Next i

'5. Сортируем названия кафедр:

Call СортировкаМассива(КолЭлементов)

'6. Заполняем поле со списком и выводим форму на экран:

frmИнститут.cboКафедра.List = Кафедры

frmИнститут.Show

End Sub

2.Дважды щелкните (в форме!) по элементу cboКафедра - появится пустая процедура Private Sub cboКафедра_Change. Далее наберите следующий код:

Option Base 1

Private Sub cboКафедра_Change()

Dim ПреподавателиТранс() As String

Dim Преподаватели() As String

'1. Отбираем сотрудников кафедры АСУ в массив Преподаватели:

НомерСтроки = 3

КолСотрудников = 0

Worksheets("Кадры").Select

While Trim(Cells(НомерСтроки, 2).Value) <> ""

If Trim(Cells(НомерСтроки, 1).Value) = _

cboКафедра.Value Then

КолСотрудников = КолСотрудников + 1

ReDim Preserve Преподаватели(2, КолСотрудников)

Преподаватели(1, КолСотрудников) = _

Cells(НомерСтроки, 2).Value

Преподаватели(2, КолСотрудников) = _

Cells(НомерСтроки, 3).Value

End If

НомерСтроки = НомерСтроки + 1

Wend

'2. Транспонируем массив Преподаватели:

ReDim ПреподавателиТранс(КолСотрудников + 1, 2)

For i = 1 To КолСотрудников

ПреподавателиТранс(i, 1) = Преподаватели(1, i)

ПреподавателиТранс(i, 2) = Преподаватели(2, i)

Next i

'3. Заполняем список, состоящий из двух колонок и выводим форму на экран:

With lstCотрудник

.ColumnCount = 2

.MultiSelect = fmMultiSelectMulti

.List = ПреподавателиТранс

End With

End Sub

3.Расширим постановку задачи: при щелчке по кнопке ОК выведем информацию о том, какую кафедру и скольких преподавателей выбрал пользователь:

Private Sub cmdOK_Click()

Dim Сотрудников As Integer

Dim Кафедра As String

For i = 0 To lstCотрудник.ListCount - 1

If lstCотрудник.Selected(i) = True Then

Сотрудников = Сотрудников + 1

End If

Next i

MsgBox "Выбрано " & Сотрудников & _

" преподавателей кафедры " & Кафедра & "!", _

vbInformation, "Сообщение"

Unload Me

End Sub

4.В завершение введем код для обработки события «щелчок по кнопке Отмена»:

Private Sub cmdОтмена_Click()

Unload Me

End Sub

5.Протестируйте работу созданного приложения.

6.В процедуре ВзаимосвязанныеСписки установите точку останова в строке: frmИнститут.cboКафедра.List = Кафедры, запустите эту программу и далее выполните её в пошаговом режиме. Обратите внимание на передачу управления во подпрограмму Private Sub cboКафедра_Change().

Флажок (CheckBox)

Следующие элементы управления используются для большей наглядности вариантов выбора, когда их количество невелико. К ним относятся такие элементы управления как CheckBox, ToggleButton и OptionButton.

Предположим, что нам надо создать форму, с помощью которой пользователь указывает нужный ему семестр:

Рис. 10‑12. Форма с флажками

ТРЕБУЕТСЯ: создать форму (выполните самостоятельно!) и написать программу её инициализации.

Начальные условия

1) при создании формы присвойте следующие имена элементам управления:

­ кнопке ОК – cmdOK

­ кнопке Отмена – cmdОтмена

­ флажку Осенний семестр – chkОсень

­ флажку Весенний семестр – chkВесна

2) саму форму назовите frmСеместрCheckBox.

Тогда код, который инициализирует форму с двумя флажками, запишется так:

SubfrmСеместрCheckBox_Initialize()

cmdOK.Default = True

cmdОтмена.Cancel = True

chkОсень.Caption = "Осенний семестр"

chkВесна.Caption = "Весенний семестр"

chkОсень.Value = True

End Sub

Задание:

1. В Модуль11 наберите и протестируйте программу frmСеместрCheckBox_Initialize.

2. В модуле формы frmСеместрCheckBox напишите программу обработки события «щелчок/нажатие кнопки cmdОтмена», которая выгружает форму из памяти.

Расширим задачу и выведем на экран сообщение с информацией о том, какой семестр(ы) выбрал пользователь.

Для того чтобы узнать, установлен флажок или сброшен, воспользуемся свойством Value:

Private Sub cmdOK_Click()

If ChkОсень.Value = True And chkВесна.Value = True Then

MsgBox "Выбраны оба семестра!", vbInformation, _

"Сообщение"

ElseIf ChkОсень.Value = True And chkВесна.Value = False Then

MsgBox "Выбран осенний семестр!", vbInformation, _

"Сообщение"

ElseIf ChkОсень.Value = False And chkВесна.Value = True Then

MsgBox "Выбран осенний семестр!", vbInformation, _

"Сообщение"

Else

MsgBox "Не выбран ни один семестр!", vbInformation, _

"Сообщение"

End If

Unload Me

End Sub

Задание:

В модуле формы наберите эту программу и протестируйте работу приложения.