1.2. Автоматическое перетаскивание
Автоматическое перетаскивание – наиболее простая реализация технологии Drag&Drop.
Делается это элементарно. У многих объектов имеется свойство DragMode. Оно определяет режим перетаскивания для объекта и может принимать два значения: DragMode=0, т.e. вручную, и DragMode=1, т.е. автоматически. По умолчанию оно в проекте всегда установлено состояние 0, т.е. ручное.
Установить свойство DragMode=1 можно в окне свойств, а можно программно. Давайте создадим новый проект и посмотрим, как это все работает.
Пример.
1. Расположите на форме три текстовых поля Text1, Text2 и Text3. Организуем перетаскивание содержимого Text1 и Tex2 в Text3.
2. В процедуре загрузки формы установим автоматический режим свойства DragMode для Text1 и Text2 и заполним их текстом, а Text3 очистим (рис. 14.1).
Во время перетаскивания можно менять изображение курсора мышки. Курсор меняется с помощью свойства DragIcon. Это свойство определяет значок, который будет использоваться в качестве указателя мыши при операции перетаскивания. Можно в окне свойств установить свойству DragIcon какую-нибудь иконку – файл с расширением .ico. Мы сделаем это программно. Но при программной загрузке картинок их всегда надо таскать с проектом, а при загрузке картинок в окне свойств они становятся частью проектов и отдельно их хранить не надо.
Option Explicit
Private Sub Form_Load()
Text1.DragMode = 1
Text2.DragMode = 1
Text1.Text = "Доброе утро"
Text2.Text = "Спокойной ночи"
Text3.Text = ""
Text1.DragIcon = LoadPicture(App.Path & "\Drag1pg.ico")
Text2.DragIcon = LoadPicture(App.Path & "\Drag1pg.ico")
End Sub
Соответствующие файлы с расширением .ico нужно скопировать в папку с данным проектом.
Рис. 14.1
3. Мы будем использовать для создания процедуры событие DragDrop, а поскольку оно возникает по окончании процесса перетаскивания, то процедуру надо создавать в Text3. Ведь именно там конечный пункт нашего процесса.
С помощью аргумента Source и ключевого слова TypeOf мы проведем проверку типа объекта (то что мы перетаскиваем Text в Text, а не Text в Picture) и изменим содержимое Text3. Это и будет результат перетаскивания.
Private Sub Text3_DragDrop(Source As Control, X As Single, Y As Single)
If TypeOf Source Is TextBox Then
Text3.Text = Source.Text
End If
End Sub
4. Запустите проект и поперетаскивайте в Text3 и Text1 и Text2.
5. Так как на форме других объектов, кроме текстовых полей нет, то вместо ключевого слова TypeOf можно проверять конкретно каждый элемент и присваивать значение того, которого захотим. Для идентификации элемента есть свойство Tag. Смысл его в том, что по нему с помощью аргумента Source мы можем однозначно идентифицировать объект-источник. В отличие от других свойств, значение свойства Tag не используется языком Visual Basic, но его можно использовать для идентификации объектов. Этому свойству мы можем присвоить любое имя-идентификатор, главное, чтоб они не были одинаковыми. Для этого в процедуру Form_Load допишем две строчки:
Text1.Tag = "Текст1"
Text2.Tag = "Текст2"
Теперь наша процедура Text3_DragDrop будет выглядеть следующим образом:
Private Sub Text3_DragDrop(Source As Control, X As Single, Y As Single)
If Source.Tag = "Текст1" Or Source.Tag = "Текст2" Then
Text3.Text = Source.Text
End If
End Sub
6. Сохраните и протестируйте проект. Обратите внимание, что отредактировать текст ни в Text1, ни в Text2 нельзя. Дело в том, что инициируемые пользователем события мыши или клавиатуры KeyDown, KeyPress, KeyUp, MouseDown, MouseMove и MouseUp распознаваться НЕ БУДУТ! Видя такое дело, нам целесообразно перейти к более сложному, но контролируему ручному перетаскиванию.
