13. Drag & Drop

E-mail Печать PDF
Рейтинг пользователей: / 0
ХудшийЛучший 
Индекс материала
13. Drag & Drop
События Drag&Drop
OLE-Drag&Drop
Все страницы

Технология Drag & Drop

 

Понятие технологии Drag&Drop

Каждый раз, работая в Windows, пользователь сталкивается с технологией Drag&Drop (перетащить и оставить). Например, перетаскивая файлы и папки, кнопки, ярлыки, пиктограммы. На этой технологии построена работа в Windows.

Функции Drag&Drop применяются для быстрого переноса данных с одного приложения в другое, или в пределах одного приложения. Для копирования и перемещения файлов в проводнике Windows или для открытия файлов программой путем сбрасывания файла на окно приложения.

 

Объекты Drag&Drop

В процессе Drag&Drop участвуют два объекта: объект-источник и объект-приемник. В источнике происходит захват элемента нажатием кнопки мыши. Чтобы оставить объект в объекте приемнике, следует отпустить кнопку мыши.

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

Начало процесса перетаскивания, как правило, обрабатывается в процедуре обработки события MouseDown, после чего объект становится «привязанным» к курсору мыши, пока кнопка мыши не будет отпущена.

Когда переносимый объект попадает в объект-приемник, его следует там оставить. При этом должно быть определено действие, совершаемое над перемещаемым объектом. Должен ли он быть скопирован, перемещен, и т.д.

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

Свойство DragSize получает размеры в пикселах прямоугольной области, за пределы которой должен выйти указатель при выполнении операции перетаскивания с тем, чтобы данная операция обрабатывалась как операция перетаскивания.

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

 

Метод DoDragDrop

Метод DoDragDrop начинает операцию перетаскивания.

DoDragDrop(data, allowedEffects),

где data - перетаскиваемые данные,

allowedEffects ? одно из значений перечисления DragDropEffects. Определяет, какие операции перетаскивания возможны.

Члены перечисления DragDropEffects:

Имя

Описание

All

Данные копируются, удаляются из источника и перемещаются в приемник.

Copy

Данные копируются в приемник.

Link

Данные из источника связываются с приемником

Move

Данные из источника перемещаются в приемник.

None

Приемник не принимает данные.

Метод DoDragDrop возвращает значение перечисления DragDropEffects, представляющее конечный результат выполнения операции перетаскивания.

Метод DoDragDrop определяет элемент управления по текущему расположению курсора. Затем он проверяет, является ли элемент управления допустимым для конечного расположения объекта. Если да, то вызывается событие GiveFeedback с указанным эффектом перетаскивания (перечисление DragDropEffects).

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

Перечисление DragAction указывает, должна ли быть продолжена операция перетаскивания и каким образом. Члены перечисления DragAction:

Имя члена

Описание

Cancel

Операция отменяется. Возникает событие DragLeave

Continue

Операция будет продолжена, возникает событие DragOver для продолжения операции и событие GiveFeedback с новым эффектом

Drop

Операция будет остановлена после перетаскивания. Значение эффекта перетаскивания возвращается источнику.

 


События Drag&Drop

MouseDown

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

Свойства MouseEventArgs:

Свойство

Значение

Button

Какая кнопка мыши была нажата.

Clicks

Число нажатий и отпусканий кнопки мыши.

Delta

Счетчик со знаком для количества щелчков вращающегося колесика мыши. Щелчок - это один зубчик колесика мыши.

X

x-координата мыши.

Y

y-координата мыши.

События мыши происходят в следующем порядке:

1.     MouseEnter

2.     MouseMove

3.     MouseDown

4.     MouseUp

5.     MouseLeave

 

DragDrop

Событие DragDrop возникает, когда операция перетаскивания завершена. Обработчик событий получает аргумент типа DragEventArgs.

Свойства DragEventArgs:

Свойство

Описание

AllowedEffect

Значение, указывающее, какие операции перетаскивания разрешены источником события перетаскивания.

Data

Объект IDataObject, содержащий данные, связанные с этим событием.

Effect

Эффект высвобождения в рамках операции перетаскивания.

KeyState

Состояние клавиш SHIFT, CTRL, ALT и кнопок мыши.

X

Координата по оси X для указателя мыши (в экранных координатах).

Y

Координата по оси Y для указателя мыши (в экранных координатах).

Чтобы преобразовать значения свойств X и Y в координаты перемещаемого объекта (клиента) следует использовать метод PointToClient. В общем виде вызов метода выглядит следующим образом:

Координаты клиента = объект_приемник.PointToClient(New Point(e.X, e.Y)),

где Point - структура, определяющая точку на плоскости.

 

DragEnter

Событие DragEnter происходит при перемещении объекта внутрь границ элемента управления.

 

DragLeave

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

 

DragOver

Событие DragOver происходит при перетаскивании объекта над границами элемента управления.

 

GiveFeedback

Событие GiveFeedback возникает в начале операции перетаскивания и позволяет источнику изменять внешний вид указателя мыши, чтобы обеспечить визуальную обратную связь во время операции перетаскивания. Обработчик событий получает аргумент типа GiveFeedbackEventArgs.

Свойства GiveFeedbackEventArgs:

Свойство

Описание

Effect

Обратная связь отображенной операции перетаскивания.

UseDefaultCursors

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

 

QueryContinueDrag

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

Свойства QueryContinueDragEventArgs:

Свойство

Описание

Action

Состояние операции перетаскивания.

EscapePressed

Нажата ли пользователем клавиша ESC.

KeyState

Текущее состояние клавиш SHIFT, CTRL и ALT.

 

 


OLE-Drag&Drop

Технология перетаскивания данных между приложениями называется OLE-Drag&Drop. Перетаскивание с использованием OLE-технологии также использует модель объектов источника и приемника, но в данном случае перемещается не элемент управления, а объект данных, что позволяет реализовать обмен данными с любыми приложениями, используя OLE-интерфейс Windows.

Процесс переноса следует выполнять в соответствии с правилами Windows. Если перетаскивание осуществляется только при нажатой кнопке мыши, то считается, что данные перемещаются из объекта-источника в объект-приемник, и по завершении переноса перемещенные данные в источнике следует удалить. Если перетаскивание выполняется при нажатой клавише Ctrl, то данные копируются.

При OLE-перетаскивании на стартовой стороне формируется пакет данных в соответствующем формате. Как и при обычном перетаскивании, процесс OLE-перетаскивания начинается вызовом метода DoDragDrop.

На принимающей стороне в обработчике события DragEnter следует проверить тип перетаскиваемой информации и указать допустимые действия: копирование или перемещение. Затем пакет данных принимается и соответствующим образом обрабатывается. Когда данные оставляются, для объекта-приемника происходит событие DragDrop.

Проверить тип перетаскиваемой информации можно с помощью метода GetDataPresent объекта DragEventArgs, который является параметром события DragEnter. Например:

If (e.Data.GetDataPresent(DataFormats.Text)) Then ...

Некоторые поля класса DataFormats:

Поле

Описание

Bitmap

Формат точечного рисунка Windows.

CommaSeparatedValue

Формат значений, разделенных запятой.

FileDrop

Формат обмена данными Windows.

Html

Текст, состоящий из данных HTML.

MetafilePict

Формат метафайла Windows.

Rtf

Текст, состоящий из данных формата Rich Text Format.

StringFormat

Формат строкового класса форм, который формы Windows Forms используют для хранения строковых объектов.

Text

Стандартный текстовый формат ANSI.

Tiff

Теговый формат файла изображения Windows.

UnicodeText

Стандартный текстовый формат Windows Unicode.

WaveAudio

Формат WAV.

После проверки необходимо назначить действие с помощью изменения свойства Effect параметра события DragEnter. Например:

If (e.Data.GetDataPresent(DataFormats.Text)) Then e.Effect = _ DragDropEffects.Copy

Далее необходимо написать обработчик события DragDrop для завершения перетаскивания, в этом обработчике должен находиться код, ответственный собственно за перемещение. Например, чтобы поместить текст в RichTextBox необходимо написать следующий код:

RichTextBox1.Text = e.Data.GetData(DataFormats.Text).ToString

Метод GetData возвращает данные, связанные с заданным форматом.

 

 

Добавьтe Ваш комментарий

Ваше имя (псевдоним):
Ваш адрес почты:
Заголовок:
Комментарий:

Комментарии

Интересное




Похожие материалы

Партнёры