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

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

События

Событие AddControl (добавился элемент)

Событие AddControl возникает при добавлении во время работы программы нового элемента управления в диалоговое окно (UserForm), рамку (Frame), набор вкладок (MultiPage) или на одну вкладку (Page). При добавлении элементов на стадии проектирования окна и при выводе окна на экран в процессе работы это событие не возникает. Инициируется оно методом Add (Добавить).

Процедура обработки этого события не имеет аргументов при добавлении элемента в рамку или вкладку:

Private Sub объект_AddControl ()

Для диалогового окна в качестве параметра передается добавляемый элемент:

Private Sub UserForm_AddControl (ByVal ctrl As MSForms. Control)

При добавлении элемента в набор страниц вызов этой процедуры имеет вид:

Private Sub объект_AddControl (index As Long,  ctrl As Control)

Здесь объект - это тот объект, в который добавляется элемент управления, index - индекс вкладки, в которую добавляется элемент, а ctrl - сам добавляемый элемент.

Процедура следующего примера выводит на экран сообщение всякий раз при добавлении нового элемента управления к диалоговому окну

Private Sub UserForm_AddControl (ByVal Ctrl As MSForms. Control) 
	MsgBox "Появился новый элемент"
End Sub

Событие AfterUpdate (После модификации)

Возникает после изменения пользователем данных в элементе управления. Это событие не может быть отменено. Оно происходит после события BeforeUpdate и перед событием Exit для текущего элемента и перед событием Enter для элемента, на который переместится фокус после нажатия клавиши Tab. Вызов процедуры обработки события AfterUpdate имеет вид:

Private Sub объект_AfterUpdate ()

Событие BeforeDragOver (Перед завершением перетаскивания)

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

Набор параметров, передаваемых процедуре обработки события BeforeDragOver, зависит от вида элемента управления. Они имеют следующий вид.

  • для рамки ( Frame ) :
    Private Sub объект_BeforeDragOver (ByVal Cancel As MSForms. 
    ReturnBoolean,  ctrl As Control,  ByVal Data As DataObject,  
    ByVal X As Single,  ByVal Y As Single,  ByVal DragState As fmDragState,  
    ByVal Effect As MSForms. ReturnEffect,  ByVal Shift As fmShiftState) ;
  • для набора страниц ( MultiPage ) :
    Private Sub объект_BeforeDragOver (index As Long,  ByVal Cancel As MSForms. 
    ReturnBoolean,  ctrl As Control,  ByVal Data As DataObject,  
    ByVal X As Single,  ByVal Y As Single,  ByVal DragState As fmDragState,  
    ByVal Effect As MSForms. ReturnEffect,  ByVal Shift As fmShiftState) ;
  • для полосы вкладок ( TabStrip ) :
    Private Sub объект_BeforeDragOver (index As Long,  ByVal Cancel As MSForms. 
    ReturnBoolean,  ByVal Data As DataObject,  ByVal X As Single,  ByVal Y As 
    Single,  ByVal DragState As fmDragState,  ByVal Effect As MSForms. 
    ReturnEffect,  ByVal Shift As fmShiftState) ;
  • для других элементов управления:
    Private Sub объект_BeforeDragOver (ByVal Cancel As MSForms. 
    ReturnBoolean,  ByVal Data As DataObject,  ByVal X As Single,  
    ByVal Y As Single,  ByVal DragState As fmDragState,  ByVal Effect As MSForms. 
    ReturnEffect,  ByVal Shift As fmShiftState).

Здесь объект - имя объекта, которому принадлежит процедура, index - индекс вкладки из набора вкладок, затрагиваемой операцией перетаскивания, Cancel - обязательный статус обработки события, False означает, что оно будет обрабатываться элементом (по умолчанию), True показывает, что событие будет обрабатываться приложением. Параметр ctrl - тот элемент, перетаскивание которого завершается. Параметр Data содержит перетаскиваемые данные в формате объекта типа DataObject. Параметры X и Y задают горизонтальную и вертикальную координаты положения указателя мыши в элементе, измеряемые в точках. X - расстояние от левого края элемента, Y - от верхнего края. Параметр DragState указывает состояние указателя мыши относительно целевого элемента. Его возможные значения: fmDragStateEnter = 0 - указатель внутри целевого элемента, fmDragStateLeave = 1 - указатель вне области целевого элемента, fmDragStateOver = 2 - указатель находится в новом положении, но внутри того же элемента. Параметр Effect определяет возможные операции, выполняемые над опущенным исходным элементом. Его возможные значения те же, что и у описанного выше метода StartDrag. Параметр Shift задает состояние клавиш Shift, Ctrl и Alt. Его возможные значения: fmShiftMask = 1 - нажата клавиша Shift, fmCtrlMask = 2 - клавиша Ctrl, fmAltMask = 4 - Alt.

Большинство элементов управления не поддерживает перетаскивание при значении аргумента Cancel = False (это значение устанавливается по умолчанию). Эти элементы не позволяют перетащить что-либо на себя и не возбуждают событие BeforeDropOrPaste. Исключения - поле ввода ( TextBox ) и комбинированный список ( ComboBox ), разрешающие перетаскивание даже при значении параметра Cancel = False.

Событие BeforeDropOrPaste (Перед опусканием или вставкой)

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

Набор параметров, передаваемых процедуре обработки события BeforeDropOrPaste, зависит от типа элемента управления. Они имеют такой вид:

  • для рамки ( Frame ) :
    Private Sub объект_BeforeDropOrPaste (ByVal Cancel As MSForms. 
    ReturnBoolean,  ctrl As Control,  ByVal Action As fmAction,  
    ByVal Data As DataObject,  ByVal X As Single,  ByVal Y As Single,  
    ByVal Effect As MSForms. ReturnEffect,  ByVal Shift As fmShiftState),
  • для набора страниц ( MultiPage ) :
    Private Sub объект_BeforeDropOrPaste (index As Long,  ByVal Cancel As MSForms. 
    ReturnBoolean,  ctrl As Control,  ByVal Action As fmAction,  ByVal Data As 
    DataObject,  ByVal X As Single,  ByVal Y As Single,  ByVal Effect As MSForms. 
    ReturnEffect,  ByVal Shift As fmShiftState),
  • для полосы вкладок ( TabStrip ) :
    Private Sub объект_BeforeDropOrPaste (index As Long,  ByVal Cancel As MSForms. 
    ReturnBoolean,  ByVal Action As fmAction,  ByVal Data As DataObject,  ByVal X 
    As Single,  ByVal Y As Single,  ByVal Effect As MSForms. ReturnEffect,  ByVal 
    Shift As fmShiftState),
  • для других элементов:
    Private Sub объект_BeforeDropOrPaste (ByVal Cancel As MSForms. 
    Return-Boolean,  ByVal Action As fmAction,  ByVal Data As DataObject,  
    ByVal X As Single,  ByVal Y As Single,  ByVal Effect As MSForms. ReturnEffect,  
    ByVal Shift As fmShiftState)

Здесь имя элемента объект и параметры index, Cancel, Data, Effect, X, Y и Shift имеют тот же смысл и значение, что и в процедуре обработки события BeforeDragOver, описанной выше. Параметр Action определяет результат выполняемой операции перетаскивания, основываясь на текущем состоянии клавиатуры. Возможные значения: fmActionPaste = 2 - вставить выбранный объект на предназначенное место, fmActionDragDrop = 3 - указывает, что пользователь перетащил объект с исходного места и опустил его на место назначения.

При обработке этого события можно переустанавливать параметр Action (Action), чтобы задать то действие, которое следует выполнить.

Если Effect равно fmDropEffectCopyOrMove, в качестве значения для Action можно установить fmDropEffectNone, fmDropEffectCopy или fmDropEffectMove. Если Effect равно fmDropEffectCopy или fmDropEffectMove, можно задать значение fmDropEffectNone. Если Effect установлено как fmDropEffectNone, Action изменять нельзя.

Событие BeforeUpdate (Перед модификацией)

Возникает перед изменением данных в элементе управления. Его появление не зависит от того, связаны ли данные элемента с таблицей Excel, т. е. определено ли свойство RowSource. Событие BeforeUpdate предшествует событиям AfterUpdate и Exit для того же элемента управления и событию Enter для элемента, который следующим попадет в фокус. Вот заголовок процедуры обработки этого события:

Private Sub объект_BeforeUpdate (ByVal Cancel As MSForms. ReturnBoolean)

Здесь объект - имя объекта, которому принадлежит процедура, а Cancel - обязательный статус обработки события, его значение False означает, что оно будет обрабатываться элементом (устанавливается по умолчанию), True - что событие будет обрабатываться приложением. При этом элемент остается в фокусе, но ни AfterUpdate, ни Exit для него не инициируются.

Событие Change (Изменение)

Возникает при изменении значения элемента, т. е. свойства Value. Это изменение может быть вызвано как действиями пользователя в диалоговом окне, так и программы. В частности, изменение состояния происходит:

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

Заголовок процедуры обработки события Change:

Private Sub объект_Change ()

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

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