русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Разработка экранных форм


Дата добавления: 2015-06-12; просмотров: 1288; Нарушение авторских прав


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

Добавим форму «Отпускные цены», служащую для изменения текущих отпускных цен на топлива. Разместите элементы управления как показано на рисунке ниже. При нажатии на кнопку «Изменить», прежде всего, надо организовать проверку введенных пользователем данных, затем сохранить их в диапазоне rgFuelPrice.

Рис. ХХ. Экранная форма «Отпускные цены»

Private Sub cmdChange_Click()

 

If Not IsNumeric(txtPrice76.Text) Then

SetFocusToError txtPrice76

Exit Sub

End If

 

If Not IsNumeric(txtPrice92.Text) Then

SetFocusToError txtPrice92

Exit Sub

End If

 

If Not IsNumeric(txtPrice95.Text) Then

SetFocusToError txtPrice95

Exit Sub

End If

 

If Not IsNumeric(txtPriceDT.Text) Then

SetFocusToError txtPriceDT

Exit Sub

End If

 

With Worksheets("Главный").Range("rgFuelPrice")

.Cells(1, 1).Value = CDbl(txtPrice76.Text)

.Cells(2, 1).Value = CDbl(txtPrice92.Text)

.Cells(3, 1).Value = CDbl(txtPrice95.Text)

.Cells(4, 1).Value = CDbl(txtPriceDT.Text)

End With

 

End Sub

 

Public Sub SetFocusToError(ctrl As Control)

ctrl.SelStart = 0

ctrl.SelLength = Len(ctrl.Text)

ctrl.SetFocus

End Sub

 

С помощью встроенной функции IsNumeric мы производим проверку, можно ли рассматривать введенной значение как число. Если нет, то производится вызов специально разработанной функции SetFocusToError, которая устанавливает фокус на элемент управления с неверным значением. Также в код необходимо добавить вывод на экран сообщения об ошибке c помощью функции MsgBox. При проверке всех значений данные сохраняются на рабочем листе в требуемом диапазоне.



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

Private Sub UserForm_Initialize()

With Worksheets("Главный").Range("rgFuelPrice")

txtPrice76.Text = .Cells(1, 1).Text

txtPrice92.Text = .Cells(2, 1).Text

txtPrice95.Text = .Cells(3, 1).Text

txtPriceDT.Text = .Cells(4, 1).Text

End With

End Sub

Подобным образом строятся остальные формы изменения данных на рабочих листах, основные действия, которые необходимо реализовать на форме: загрузка текущих данных, контроль данных и сохранение новых данных.

Экранная форма «Продажа» вызывается при нажатии на одну из восьми кнопок. За каждой их колонок закреплен определенный вид топлива. При продаже топлива должна измениться информация в таблице «Резервуары», находящаяся на втором листе. С данной таблицей связана диаграмма, таким образом, оператор сможет визуально контролировать объем топлива, находящегося резервуаров. Форма позволяет ввести необходимое клиенту количество либо в литрах, в таком случае автоматически вычисляется цена, либо указать сумму, на которую он совершает покупку, в таком случае количество литров также вычисляется автоматически. Перед продажей необходимо проверить условие: есть ли в резервуаре необходимое количество топлива.

Рис. ХХ. Экранная форма «Продажа»

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

Рис. ХХ. Экранная форма «Получение бензина»

Разработаем экранные формы для работы с информацией о сотрудниках.

Форма «Персонал» содержит элемент управления ListBox и четыре командные кнопки. Для того, чтобы список отображал несколько колонок необходимо изменить свойство ColumnCount, присвоим данному свойству значение 7. Для настройки ширины столбцов используется свойство ColumnWidths, в нашем случае установим значение «49.95 pt;35 pt;49.95 pt;45 pt;67.95 pt;60 pt;40 pt». Для отображения заголовков столбцов необходимо установить свойство ColumnHeads в True.

Рис. ХХ. Экранная форма «Персонал»

Команды «Добавить», «Изменить» и «Удалить» используются для изменения данных на листе «Персонал». Таким образом, нам необходимо программно добавлять, редактировать и удалять строки таблицы. Программный код формы представлен ниже.

 

Public Sub UpdateListRowSource()

Dim ws As Worksheet

Set ws = Worksheets("Персонал")

lstEmloyees.RowSource = "'Персонал'!A2:G" + _

CStr(ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row)

End Sub

 

Private Sub cmdAdd_Click()

frmEmployee.Show

If frmEmployee.Tag = "OK" Then

Dim NewRow As Integer

Dim r As Range, ws As Worksheet

Set ws = Worksheets("Персонал")

Set r = ws.UsedRange.SpecialCells(xlCellTypeLastCell)

NewRow = r.Row + 1

SaveDataToRow NewRow

UpdateListRowSource

End If

End Sub

 

Private Sub SaveDataToRow(RowIndex As Integer)

With frmEmployee

Dim ws As Worksheet

Set ws = Worksheets("Персонал")

ws.Cells(RowIndex, 1).Value = .txtLastname.Text

ws.Cells(RowIndex, 2).Value = .txtName.Text

ws.Cells(RowIndex, 3).Value = .txtPatronymic.Text

ws.Cells(RowIndex, 4).Value = .cmbSex.Text

ws.Cells(RowIndex, 5).Value = .dtpDateOfBirth.Value

ws.Cells(RowIndex, 6).Value = .cmbAppointment.Text

ws.Cells(RowIndex, 7).Value = .txtGrade.Text

End With

End Sub

 

Private Sub cmdClose_Click()

Me.Hide

End Sub

 

Private Sub cmdEdit_Click()

Dim RowIndex As Integer, ws As Worksheet

RowIndex = lstEmloyees.ListIndex + 2

Set ws = Worksheets("Персонал")

With frmEmployee

.txtLastname.Text = ws.Cells(RowIndex, 1).Value

.txtName.Text = ws.Cells(RowIndex, 2).Value

.txtPatronymic.Text = ws.Cells(RowIndex, 3).Value

.cmbSex.Text = ws.Cells(RowIndex, 4).Value

.dtpDateOfBirth.Value = ws.Cells(RowIndex, 5).Value

.cmbAppointment.Text = ws.Cells(RowIndex, 6).Value

.txtGrade.Text = ws.Cells(RowIndex, 7).Value

.Show vbModal

End With

SaveDataToRow RowIndex

End Sub

 

Private Sub cmdDelete_Click()

If lstEmloyees.ListIndex <> -1 Then

Dim RowIndex As Integer, ws As Worksheet

RowIndex = lstEmloyees.ListIndex + 2

Set ws = Worksheets("Персонал")

ws.Rows(RowIndex).Delete

UpdateListRowSource

End If

End Sub

 

Private Sub UserForm_Initialize()

UpdateListRowSource

End Sub

 

Процедура UpdateListRowSource используется для обновления свойства RowSource списка, при добавлении и удалении строк адрес связанного диапазона необходимо обновить. Строка

ws.UsedRange.SpecialCells(xlCellTypeLastCell).Row

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

При добавлении новой строки отображается форма для ввода данных, затем с помощью рассмотренного выше метода находится первая пустая строка и с помощью специально разработанной процедуры SaveDataToRow данные с формы переносятся в таблицу. После добавления строки обновляется свойство RowSource списка, и в нем появляются данные о новом работнике.

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

При удалении строки с помощью метода Delete из коллекции Rows удаляется строка с указанным индексом. После чего необходимо изменить свойство RowSource списка.

Добавьте новую форму «Работник». Разместите на ней три текстовых поля для фамилии, имени и отчества работника. Для выбора пола и должности работника добавьте два списка. Первый список мы программно заполним данными в обработчике события инициализации формы. Свойству RowSource второго списка присвойте адрес диапазона, содержащий список должностей (например, 'Данные'!B3:B6).

Для ввода даты будем использовать специальный элемент управления Microsoft Date and Time Picker Control. Данный элемент управления предлагает пользователю удобный способ работы с датами. По умолчанию данного элемента нет на панели элементов управления (Toolbox), поэтому перед использованием его необходимо туда вынести. Для чего в контекстном меню панели элементов управления выберите пункт «Additional Controls…», затем в списке «Available Controls» выберите пункт Date and Time Picker Control 6.0. На панели элементов управления появится новая пиктограмма, соответствующая добавленному элементу управления.

Рис. ХХ. Экранная форма для создания/изменения данных сотрудника

Для выбора разряда работника будем использовать элемент управления SpinButton, позволяющий выбирать числовые значения из заданного диапазона с указанным шагом. Разместите на форме текстовое поле, а рядом с ним элемент управления SpinButton, установите свойство Min равным 1, а свойство Max - 5. Программный код формы представлен ниже.

 

Option Explicit

Public Mode As Integer

 

Private Sub cmdCancel_Click()

Me.Tag = "Cancel"

Me.Hide

End Sub

 

Private Sub spnGrade_Change()

txtGrade.Value = spnGrade.Value

End Sub

 

Private Sub UserForm_Initialize()

cmbSex.AddItem "Мужской"

cmbSex.AddItem "Женский"

cmbSex.ListIndex = 0

 

End Sub

 

Private Sub cmdSave_Click()

Me.Tag = "OK"

 

If Trim(txtLastname.Text) = "" Then

MsgBox "Ошибка при заполнении поля: Фамилия."

Me.Tag = "Cancel"

End If

 

If Trim(txtName.Text) = "" Then

MsgBox "Ошибка при заполнении поля: Имя."

Me.Tag = "Cancel"

End If

 

If Trim(txtPatronymic.Text) = "" Then

MsgBox "Ошибка при заполнении поля: Отчество."

Me.Tag = "Cancel"

End If

Me.Hide

End Sub

 

Public Sub SetFocusToError(ctrl As Control)

ctrl.SelStart = 0

ctrl.SelLength = Len(ctrl.Text)

ctrl.SetFocus

End Sub

 

Приложение 3. Автоматизация заполнения бланка с помощью программы текстового процессора Word



<== предыдущая лекция | следующая лекция ==>
Настройка пользовательского интерфейса | Разработка документа


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.261 сек.