Тверской государственный университет
Опубликован: 13.09.2006 | Доступ: свободный | Студентов: 3490 / 369 | Оценка: 4.65 / 4.29 | Длительность: 30:37:00
Специальности: Программист, Менеджер
Лекция 14:

Проектирование интерфейса. Объекты диалоговых окон

Аннотация: Проектирование интерфейса. Объекты диалоговых окон. Объект UserForm (диалоговое окно), коллекция UserForms (диалоговые окна). Коллекция Controls. Объекты - элементы управления. Перечень основных элементов управления. Общие свойства элементов управления: объект-родитель, имя объекта, значение объекта, расположение объекта, параметры внешнего вида объекта, шрифт, свойства поведения объекта. Другие свойства: CheckBox - флажок (кнопка выбора), ComboBox - комбинированный список, CommandButton - командная кнопка, Frame - рамка (группы), Image - изображение, Label - метка (надпись, статический текст), ListBox - список, MultiPage - набор страниц, OptionButton - кнопка-переключатель, ScrollBar - полоса прокрутки, SpinButton - счетчик, TabStrip - полоса вкладок, TextBox - поле ввода (окно редактирования), ToggleButton - выключатель, Объект DataObject. Перемещение объектов. Как реализовать технику DragAndDrop. События: AddControl (добавился элемент), AfterUpdate (После модификации), BeforeDragOver (Перед завершением перетаскивания), BeforeDropOrPaste (Перед опусканием или вставкой), BeforeUpdate (Перед модификацией), Change (Изменение), Click (Щелчок), DblClick (Двойной щелчок), DropButtonClick (Щелчок кнопки списка), Enter, Exit (Вход, Выход), Error (Ошибка), KeyDown, KeyUp (Клавиша нажата, Клавиша отпущена), KeyPress (Клавиша нажата), Layout (Расположение), MouseDown, MouseUp (Мышь нажата, Мышь отпущена), MouseMove (Мышь движется), RemoveControl (Удаление элемента), Scroll (Прокрутка), SpinDown (Уменьшить счетчик), SpinUp (Увеличить счетчик), Zoom (Расширение). Методы: Add (Добавить), AddItem (Добавить элемент), Clear (Очистить), Copy (Копировать), Cut (Вырезать), DropDown (Вывести список), Move (Сдвинуть), Paste (Вставить), Реализация операций Cut, Copy, Paste в диалоговых окнах, Метод RedoAction (Повторить действие), Remove (Удалить), RemoveItem (Удалить элемент), Repaint (Перерисовать), Scroll (Прокрутить), SetDefaultTabOrder (Установить стандартный порядок обхода), SetFocus (Установить фокус), UndoAction (Отменить действие), реализация операций Undo и Redo в диалоговых окнах и метод ZOrder (Z-упорядочить).

Программный код большинства примеров данной лекции можно найти в проектах, доступных для просмотра: DocOne13, temp.

Объект UserForm (диалоговое окно), коллекция UserForms (диалоговые окна)

В этой лекции мы рассмотрим основные объекты, связанные с организацией работы диалоговых окон. К ним относятся отдельные диалоговые окна, их коллекции и стандартные элементы управления, которые можно размещать в диалоговых окнах.

Объект UserForm (диалоговое окно или форма) - прямоугольное окно на экране с размещенными на нем элементами управления - важная часть пользовательского интерфейса. Создание и использование диалоговых окон было рассмотрено в предыдущей лекции. Здесь мы кратко опишем свойства класса UserForm и элементов управления.

Все загруженные в приложение диалоговые окна образуют коллекцию UserForms (диалоговые окна). Она обладает стандартными свойствами Count (Количество), Item (в других коллекциях Item часто выступает как метод, хотя суть от этого не меняется) и методом Add (Добавить). Значение свойства Count равно количеству элементов в коллекции; Item позволяет получить доступ к отдельному элементу коллекции (здесь Item - свойство "по умолчанию", т. е. может опускаться), метод Add (имя_формы) позволяет поместить в коллекцию новое диалоговое окно. Обращение к элементу коллекции имеет вид:

UserForms. Item.  (index)

Или

UserForms (index)

Параметр index - число от 0 до UserForms. Count - 1, задающее номер элемента в коллекции. Во втором варианте определенное по умолчанию свойство Item опущено. Заметьте, коллекцию UserForms составляют не формы, спроектированные для работы с документом, а только загруженные формы, те, для которых был выполнен метод Load.

Как и другие объекты-коллекции, UserForms можно использовать для организации цикла по всем загруженным диалоговым окнам приложения. Выражение UserForms (index) можно подставлять как аргумент функции, имеющий тип диалогового окна UserForm

Эта коллекция корректно работает с действительно загруженными окнами, но дает странные результаты, когда загруженных форм нет. Вот небольшой пример работы с документом, имеющим две формы с именами frmMy1 и frmMy2:

Public Sub PropOfForm () 
	Dim MyForm As UserForm
	
	Debug. Print UserForms. Count
	Debug. Print frmMy1. Name,  frmMy1. Caption
	
	Debug. Print UserForms. Count
	UserForms. Add  ("frmMy1") 
	
	Debug. Print UserForms. Count
	For Each MyForm In UserForms
		Debug. Print MyForm. Caption
	Next MyForm
	
	UserForms. Add  ("frmMy2") 
	Debug. Print UserForms. Count

End Sub

Приведем результаты отладочной печати:

0 
frmMy1	Первая
 1 
 2 


 3

Заметьте, вначале счетчик числа элементов коллекции показывает, что элементов там нет. После работы с формой в операторе Debug (но не ее загрузки) счетчик увеличивается на 1, также как и при выполнении метода Add. Однако в цикле по элементам коллекции заголовки форм не распечатываются - диалоговые формы не доступны.

С коллекциями диалоговых окон приходится работать редко. Чаще всего, работа идет с элементами этих коллекций. Для объектов класса UserForm (Диалоговое окно) определено около 40 свойств. Основные группы свойств и некоторые входящие в них свойства таковы:

  • имя диалогового окна: ( Name ) - имя, используемое при обращении к окну в программе;
  • положение окна на экране: Height (Высота), Width (Ширина), Left и Top - координаты верхнего левого угла;
  • изображение окна: BackColor (Цвет фона), Forecolor (Цвет переднего плана), BorderColor (Цвет рамки), Caption (Заголовок) ;
  • картинка в окне: Picture - файл с изображением, PictureSizeMode - вариант размера картинки;
  • полоса прокрутки: ScrollBar - расположение полосы прокрутки в окне ( 0 - отсутствует, 1 - горизонтальная полоса, 2 - вертикальная, 3 - обе), ScrollHeight и ScrollWeidth - высота и ширина области прокрутки в диалоговом окне, ScrollLeft и ScrollTop - координаты верхнего левого угла области прокрутки;
  • шрифт: Font [значение этого свойства - объект типа шрифт (Font) ].

События: Activate, Deactivate, AddControl, BeforeDragOver, BeforeDropOrPaste, Click, DblClick, Error, KeyDown, KeyUp, KeyPress, Layout, MouseDown, MouseUp, MouseMove, RemoveControl, Scroll, Terminate, Zoom.

Методы: Copy, Cut, Hide, Load, Move, Paste, PrintForm, RedoAction, Repaint, Scroll, SetDefaultTabOrder, Show, UndoAction, Unload.

Выше мы описали процесс разработки диалогового окна. Заметьте, спроектированная форма определяет не один объект (экземпляр класса), а целый класс. Поэтому в программе можно объявлять несколько объектов данного класса и для каждого из них по-разному определять свойства диалогового окна. Вот простой пример:

Dim Myf1 As New frmMy1,  Myf2 As New frmMy1,  Myf3 As New frmMy2
	Debug. Print Myf1. Name,  Myf2. Caption,  Myf3. Name
	Myf1. BackColor = vbGreen
	Myf2. Show
	Myf1. Show

Здесь определены три объекта, первые два из которых имеют один и тот же класс. Изменение цвета фона диалогового окна отражается только при показе первой формы, вторая ѕ сохраняет исходный цвет.

Коллекция Controls

Для доступа к набору элементов управления диалогового окна можно использовать коллекцию Controls, включающую все элементы управления окна. Каждый элемент управления имеет в этой коллекции индекс, значение которого может быть числом или строкой. Для первого элемента управления индекс равен 0. Числовые индексы определяются порядком размещения элементов в коллекции. Строковое значение индекса соответствует имени ( Name ) элемента.

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

Public Sub WorkWithForm2 () 
	Dim myForm As New frmMy2
	Dim Ctrl As Control
	Dim msgCode As Integer,  Answer As Integer
	For Each Ctrl In myForm. Controls 'цикл по всем элементам управления
		msgCode = vbYesNo + vbQuestion
		'Вопрос об очередном элементе управления:
		Answer = MsgBox (prompt:="Скрыть элемент " & Ctrl. Name,  _
		Buttons:=msgCode,  Title:="Вопрос") 
		If Answer = vbYes Then		'ответ "Да"
			Ctrl. Visible = False	 'скрыть очередной элемент
		End If
	Next Ctrl
	myForm. Show
End Sub

Объекты - элементы управления

Перечень основных элементов управления

Рассмотрим набор элементов управления. Ранее говорилось, что помимо элементов управления, появляющихся на стандартной панели, щелчок по ней правой кнопки открывает большой список дополнительных элементов управления, более того, пользователь имеет возможность расширить этот список. Мы ограничимся сейчас рассмотрением некоторого стандартного набора, который включает следующие объекты:

  • CheckBox - флажок;
  • ComboBox - комбинированный список (поле со списком) ;
  • CommandButton - командная кнопка;
  • Image - изображение (окно изображения) ;
  • Label - метка (надпись, статический текст) ;
  • ListBox - список (окно списка) ;
  • MultiPage - набор страниц;
  • OptionButton - переключатель (кнопка зависимого выбора) ;
  • ScrollBar - полоса прокрутки;
  • SpinButton - счетчик (ворот) ;
  • TabStrip - полоса вкладок;
  • TextBox - поле ввода (окно редактирования, текстовое поле) ;
  • ToggleButton - выключатель.

В этом списке справа указаны русские эквиваленты английских названий элементов управления. Для некоторых элементов названия и переводы еще не устоялись. Даже в разных продуктах Microsoft некоторые элементы называются по-разному, например элемент TextBox в Visual C++ называется EditСontrol.

Значки различных элементов управления на панели элементов показаны на рис. 13.1. Заметьте, показанный здесь элемент управления ActiveX PlugIn относится к дополнительным элементам.

Панель элементов

Рис. 13.1. Панель элементов

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

Общие свойства элементов управления

Объект-родитель

Свойство Parent возвращает имя диалогового окна, объекта или коллекции, которые содержат данный элемент управления, объект или коллекцию. Значение этого свойства можно только читать. Оно полезно в процедурах, получающих в качестве параметров объекты-элементы управления, поскольку позволяет по такому объекту получить доступ к содержащему его диалоговому окну и другим элементам управления окна.

Имя объекта

Свойство Name задает имя объекта (диалогового окна, элемента управления или шрифта). Это внутреннее имя, идентифицирующее объект в программе. Поэтому в одном проекте не должно быть двух диалоговых окон с одним именем, а в одном окне - двух одноименных разных элементов управления.

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

класс_объекта. Name = Имя

где класс_объекта - название класса объектов, а Имя - строка, задающая имя конкретного объекта из указанного класса.

При создании объектов на этапе проектирования система назначает им по умолчанию имена вида:

класс_объектаN

где N - порядковый номер очередного объекта в классе. Для диалоговых окон это имена UserForm1, UserForm2…, для командных кнопок - CommandButton1, CommandButton2 и т. д. В списке свойств Свойства (Properties) назначенное системой имя можно изменить на произвольную строку, удовлетворяющую условиям на имена в данном приложении. При этом надо одновременно изменить имя данного объекта во всех тех ранее созданных процедурах, где оно было использовано (в частности, в процедурах обработки событий данного элемента управления или диалогового окна).

Значение объекта

Свойство Value определяет состояние элемента управления или его содержимое.

Для элементов-кнопок CheckBox, OptionButton и ToggleButton свойство Value может принимать значения: Null - нейтральное состояние, True - элемент выбран (включен, отмечен), False - элемент не выбран (отключен, не отмечен).

Для элементов ScrollBar и SpinButton значение Value - целое число в промежутке, заданном свойствами Min и Max.

Для элементов-списков ComboBox и ListBox это значение в выбранной строке (если в списке несколько столбцов, берется значение из столбца, заданного свойством BoundColumn ).

Для управляющей кнопки CommandButton значение всегда False. Если из программы установить его в True, это вызовет событие Click (щелчок кнопки).

Для элементов MultiPage и TabStrip значение задает номер текущей активной страницы (вкладки). Нумерация страниц начинается с 0.

Значение элемента TextBox - текущий текст в поле редактирования.

В списках, допускающих множественный выбор, свойство Value не применяется.

Значение элемента управления, оказавшегося в фокусе, хранится также в свойстве BoundValue, которое сохраняет значение в процессе редактирования устройства, в то время как Value отражает текущие изменения значения. По завершении редактирования оба свойства совпадают.

полина есенкова
полина есенкова
Дмитрий Вологжин
Дмитрий Вологжин
Добрый день, прошел тесты с 1 по 9, 10 не сдал, стал читать лекцию и всё пройденные тесты с 1 по 9 сбросились, когда захотел пересдать 10 тест.