- •Лабораторная работа № 7 использование массивов элементов управления при разработке проектов
- •Общие сведения
- •Если массив элементов управления предусматривается разместиться в рамке, то сначала создаётся рамка, а потом массив.
- •Используемые данные
- •Анализ проекта
- •Варианты задач
- •Контрольные вопросы.
Используемые данные
Реквизит |
Имя |
Назначение |
Необходимо Необходимо Плані
і Вместе Вместе Отклонение
Отклонение |
Text1 Neobhod Text2(i)
i label5 Vmeste Label4
Text4 |
Необходимое значение показателя (элемент на форме) Необходимое значение показателя (переменная в коде) Плановое значение показателя на і-й день (массив элементов на форме) Номер дня недели Сумма плановых значений по дням (элемент на форме) Сумма плановых значений по дням (переменная в коде) Текстовая информация о результат сравнения («Перевыполнено», «Недовыполнено»,«Норма»). Числовая информация о результате сравнения |
Интерфейс с пользователем.
Задачу решают с помощью формы с одним простым текстовым полемtext1 и массивом текстовых полей text2 (рис. 7.1.). В эти текстовые поля вводят соответствующие входные данные. Результаты расчётов выводятся в области надписей label5 (сумма плановых значений по дням недели) и label4 (текстовая информация о результате сравнения величин Neobhod и Vmeste), а соответ-
Рис 4.1. Форма для решения задачи планирования
ствующее числовое значение – в текстовое поле text4.
Рис. 7.2. Схема алгоритма решения второго этапа (вычисление суммы плановых значений и выведение результатов).
Поскольку на форме нет командных кнопок, то процесс вычисления и вывод результата запускается событиями в полях ввода входных данных (событие потеря фокуса - LostFocus) и изменения в плановых данных по любому дню недели (событиеChange).
Выбираем событие Change, поскольку с начала планирования входные данные по дням недели ещё не введены (плановые значения приравниваются нулю), и в процессе планирования они будут изменяться. Приложение будет реагировать на каждое изменение плановых показателей, выводя соответствующие значения их суммы и отклонения от требуемого значения.
Числовое значение отклонения даёт представление о том, какую величину показателя необходимо ещё распределить или, наоборот, - на какую уменьшить.
Для большей выразительности качественную характеристику состояния процесса планирования (слова «Перевыполнение», «Недовыполнение» и «Норма») выводят на соответствующем фоне (желтом, красном или зелёном).
Код программы.
Для реализации задачи планирования в коде необходимо предвидеть обработку следующих двух событий:
потерю фокуса текстовым полем txtНеобходимо;
изменение какого-либо значения в массиве текстовых полей txtПлан.
Причём обработка обоих событий выполняется одинаково – по алгоритму представленному на рис 7.2. Поэтому для обработки первого события создаётся процедура по схеме алгоритма, а тело второй процедуры является вызовом первой. Тексты соответствующих процедур представлены ниже.
Option Explicit
‘ Вычисление отклонения плана заданного на неделю
' от необходимого значения показателя
Dim Vmeste As Single 'сумма плана по дням
Dim Neobhod As Single ' Требуемое значение
Dim i As Byte ' Номер дня недели
' Вычисление суммы плановых значений по дням недели
Vmeste = 0
For i = 1 To 6
Vmeste = Vmeste + CSng(Text2(i - 1))
Next i
'Вывод на форму
Label5 = Format(Vmeste, "0.00")
'Подготовка к использованию в вычислении
Neobhod = CSng(Text1.Text)
'Вывод сообщения об отклонении
If Vmeste > Neobhod Then
Label4.Caption = "Перевыполнено"
Label4.BackColor = vbYellow
ElseIf Vmeste < Neobhod Then
Label4.Caption = "Недовыполнено"
Label4.BackColor = vbRed
Else
Label4.BackColor = vbGreen
Label4.Caption = "Норма"
End If
' Вычисление и вывод величины отклонения
Text4.Text = Str(Abs(Vmeste - Neobhod))
End Sub
Private Sub Text2_Change(Index As Integer)
Text1_LostFocus
End Sub
Реализация проекта
Для реализации проекта необходимо выполнить такие действия:
Запустить на выполнения VB для создания нового проекта.
Задать заголовок формы и её имя.
Для ввода требуемого значения показателя создать текстовое поле text1 и надпись к нему label1.
Для контейнера данных по дням недели создать рамку frame1 такого размера, чтобы в ней поместился массив текстовых полей из семи элементов.
Для ввода плановых значений по дням недели создать в рамке текстовое поле text2 и надпись label2 (для понедельника) к нему. Свойствам Text для поля text2 присвоить значение ноль. Скопировать пары этих элементов в буфер, а потом вставить их из буфера в рамку. При вставке подтвердить запрос VB о создании массива элементов. Потом ещё пять раз сделать вставку из буфера. Таким образом, в рамке появится семь текстовых полей с соответствующими надписями (заголовками надписей станут названия дней недели.).
Для вывода суммы плановых значений по дням недели (величина «Вместе») создать под рамкой две надписи (label3, label5)на одном уровне – свойствам Caption левой надписи задать значение Вместе, а для правого установить значение следующих свойств:
Name: label5,
Caption: пусто,
BorderStyle: 1.
Для вывода текстовой и числовой информации об отклонении суммы плановых значений от требуемой величины показателя под предыдущей парой надписей создать текстовое поле text4 с надписью левее от него label4. Установить значения таких свойств надписи:
Name: label4
Caption: пусто
Для текстового поля установить значение таких свойств:
Name: text4
Text: пусто
Для создания процедуры обработки события «Потеря фокуса текстовым полем text1» дважды щелкнуть на этом поле, в поле со списком <Procedure> выбрать событие LostFocus и ввести тело процедуры.
Для создания процедуры обработки события «Изменение значения в массиве текстовых полей text2» дважды щелкнуть на любом текстовом поле массива элементов управления text2 и в заготовку процедуры скопировать имя предыдущей процедуры Text1_LostFocus
Сохранить форму и проект в папке на диске.