Основы офисного программирования и язык VBA


Перемещение объектов. Как реализовать технику DragAndDrop - часть 4


Событие BeforeDragOver возникает для объекта TextIn (поле ввода "Любимый цвет"), когда курсор в процессе перетаскивания попадает в область, занятую объектом. Заметьте, событие возникает многократно, поскольку курсор находится в этой области некоторое время. Вот текст обработчика этого события:

Private Sub TextIn_BeforeDragOver (ByVal Cancel As MSForms. ReturnBoolean, _ ByVal Data As MSForms. DataObject, ByVal X As Single, _ ByVal Y As Single, ByVal DragState As MSForms. fmDragState, _ ByVal Effect As MSForms. ReturnEffect, ByVal Shift As Integer)

Cancel = True Effect = fmDropEffectCopy Debug. Print "DragOver" End Sub

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

Следующее событие для объекта TextIn возникает, когда отпущена левая клавиша мыши в области этого объекта. Вот его обработчик:

Private Sub TextIn_BeforeDropOrPaste (ByVal Cancel As MSForms. ReturnBoolean, _ ByVal Action As MSForms. fmAction, ByVal Data As MSForms. DataObject, _ ByVal X As Single, ByVal Y As Single, ByVal Effect As MSForms. ReturnEffect, _ ByVal Shift As Integer)

Cancel = True Effect = fmDropEffectCopy TextIn. Text = Data. GetText Debug. Print "DragPaste" End Sub

Здесь также возвращается значение эффекта. Главное, завершается операция перетаскивания копированием текста в поле ввода из переданного в качестве параметра объекта Data класса DataObject, хранящего значение цвета, выбранного пользователем.

Совместная работа этих трех обработчиков событий и вызываемые в них методы объекта DataObject - SetText, GetText, StartDrag - обеспечивают в совокупности технику DragAndDrop. В заключение о двух экспериментах при работе с диалоговым окном.


Начало  Назад  Вперед