Поле со списком (ComboBox)
Предположим, что нам надо создать форму, с помощью которой пользователь указывает нужную ему кафедру: ТРЕБУЕТСЯ: создать форму (выполните самостоятельно!) и написать программу инициализации формы, в которой элементы поля со списком формируются на основе данных, расположенных в первом столбце на листе Кадры в книге C:\St\Институт.xls (Рис. 10‑10): Начальные условия 1) при создании формы присвойте следующие имена элементам управления: кнопке ОК – cmdOK кнопке Отмена – cmdОтмена полю со списком – cboКафедра 2) саму форму назовите frmКафедра. Тогда код, который формирует поле со списком, запишется так: Sub ПолеСоСписком() 'Объявляем переменные и массивы: Dim Кафедры() As String Dim Кафедра As String Dim НомерСтроки As Integer Dim КолСотрудников As Integer Dim КолКафедр As Integer '1. Проверяем существование книги C:\St\Институт.xls Call НаличиеКниги("C:\St\Институт.xls") If flagНаличие = 0 Then Exit Sub '2. Проверяем существование листа Кадры Call НаличиеЛиста("Кадры") If flag = 0 Then Exit Sub '3. Формируем список кафедр, которые встречаются в первом _ столбце на листе Кадры: ReDim Preserve Кафедры(1) As String Кафедры(1) = Trim(Cells(3, 1).Value) КолКафедр = 1 'кол-во кафедр НомерСтроки = 4 WhileTrim(Cells(НомерСтроки, 1).Value) <> "" Кафедра = Trim(Cells(НомерСтроки, 1).Value) For j = 1 To КолКафедр If Кафедра = Кафедры(j) Then GoTo n3 Next j КолКафедр = КолКафедр + 1 ReDim Preserve Кафедры(КолКафедр) As String Кафедры(КолКафедр) = Trim(Cells(НомерСтроки, 1).Value) n3: НомерСтроки = НомерСтроки + 1 Wend '4. Сортируем список кафедр: For i = 1 To КолКафедр - 1 Кафедра = Кафедры(i) k = i For j = i + 1 To КолКафедр If Кафедры(j) >= Кафедра Then Else Кафедра = Кафедры(j) Кафедры(j) = Кафедры (k) Кафедры(k) = Кафедра End If Next Nexti '5. Заполняем поле со списком и выводим форму на экран: frmКафедра.cbo Кафедра.List = Кафедры frmКафедра.Show End Sub Задание: 1. В Модуль10 наберите и протестируйте программу ПолеСоСписком. 2. В модуле формы frmКафедра напишите программу обработки события «щелчок/нажатие кнопки cmdОтмена», которая выгружает форму из памяти. 3. Оформите фрагмент сортировки одномерного массива в виде подпрограммы СортировкаМассива(КолЭлементов). Определение выбранного элемента Для того чтобы узнать, какой элемент списка выбрал пользователь, воспользуемся свойством 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.После того как форма создана, в модуле формы наберите следующий код: Option Base 1 Private SubUserForm_Initialize() ' 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. Формируем список кафедр: ReDim Preserve Кафедры(1) As String Кафедры(1) = Trim(Cells(3, 1).Value) КолКафедр = 1 'кол-во кафедр НомерСтроки = 4 WhileTrim(Cells(НомерСтроки, 1).Value) <> "" Кафедра = Trim(Cells(НомерСтроки, 1).Value) For j = 1 To КолКафедр If Кафедра = Кафедры(j) Then GoTo n3 Next j КолКафедр = КолКафедр + 1 ReDim Preserve Кафедры(КолКафедр) As String Кафедры(КолКафедр) = Trim(Cells(НомерСтроки, 1).Value) n3: НомерСтроки = НомерСтроки + 1 Wend '5. Сортируем названия кафедр: Call СортировкаМассива(КолЭлементов) '6. Заполняем поле со списком и выводим форму на экран: cboКафедра.List = Кафедры End Sub 2.Дважды щелкните (в форме!) по элементу cboКафедра - появится пустая процедура Private Sub cboКафедра_Change. Далее наберите следующий код: 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 ОБРАТИТЕ ВНИМАНИЕ на условие: If Trim(Cells(НомерСтроки, 1).Value) = cboКафедра.Value Then Именно свойство Valueэлемента управления cboКафедра «знает», какую кафедру выбрал пользователь! 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 Next i MsgBox "Выбрано " & Сотрудников & _ " преподавателей кафедры " & cboКафедра.Value _ Unload Me End Sub 4.В завершение введем код для обработки события «щелчок по кнопке Отмена»: Private Sub cmdОтмена_Click() Unload Me End Sub 5.Свяжите вызов формы с кнопкой на панели инструментов или с командой меню. Для этого пердварительно напишите программу ВызовФормы: SubВызовФормы() frmИнститут.Show End Sub 6.Протестируйте работу созданного приложения. 7.В процедуре ВзаимосвязанныеСписки установите точку останова в строке: 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 Задание: В модуле формы наберите эту программу и протестируйте работу приложения.
Популярное: Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... ©2015-2020 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (1249)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |