Пошаговое руководство. Выполнение операции перетаскивания в Windows Forms
Для выполнения операций перетаскивания и вставки в приложениях Windows необходимо обрабатывать последовательность событий, особенно DragEnter, DragLeave, и DragDrop события. Работая со сведениями, доступными через аргументы этих событий, можно значительно упростить операции перетаскивания.
Перетаскивание данных
Все операции перетаскивания начинаются с переноса данных. Функции для включения данных, собираемых при начале перетаскивания реализуются в DoDragDrop метод.
В следующем примере MouseDown событие используется для начала операции перетаскивания, так как он является самым удобным (большинство операций перетаскивания и вставки начинаются с кнопкой мыши). Однако не забывайте, что любое событие может использоваться для инициализации процедуры перетаскивания.
Note
Некоторые элементы управления имеют собственные события перетаскивания. ListView И TreeView элементов управления, например, быть ItemDrag событий.
Начало операции перетаскивания
В MouseDown событий для элемента управления, в котором начнется перетаскивание, используйте
DoDragDrop
будут иметь метод, чтобы задать данные для переноса и разрешенный результат перетаскивания. Дополнительные сведения см. в разделах Data и AllowedEffect.В следующем примере показан запуск операции перетаскивания. Элемент управления, где начинается перетаскивание Button элемента управления, перетаскиваемых данных является строка, представляющая Text свойство Button управления и разрешенные эффекты копирование или перемещение.
Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown Button1.DoDragDrop(Button1.Text, DragDropEffects.Copy Or DragDropEffects.Move) End Sub
private void button1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { button1.DoDragDrop(button1.Text, DragDropEffects.Copy | DragDropEffects.Move); }
Note
Любые данные, которые могут использоваться в качестве параметра
DoDragDrop
метод; в примере выше, Text свойство Button управления был использован (а не жестко запрограммированного значения или получение данных из набора данных), так как свойство было связано с расположение которого выполнялось перетаскивание ( Button управления). Учитывайте это при реализации операций перетаскивания в приложениях Windows.
Во время операции перетаскивания по сути, можно обрабатывать QueryContinueDrag событие, которое «запрашивает разрешение» системы на продолжение операции перетаскивания. При обработке этого метода, он также является подходящей точкой для вызова методов, которые будет влиять на операцию перетаскивания, например расширение TreeNode в TreeView управления, когда курсор находится над ней.
Завершение перетаскивания данных
После начала перетаскивания данных из расположения в форме Windows Forms или элементе управления их требуется куда-то поместить. При попадании курсора в область формы или элемента управления, которые правильно настроены для размещения данных, вид курсора изменится. Любую область формы Windows или элемента управления можно сделать для принятия перетаскиваемых данных, задав AllowDrop свойство и обработка DragEnter и DragDrop события.
Завершение операции перетаскивания
Задайте AllowDrop присваивается значение true.
В
DragEnter
событие элемента управления, в котором будет выполнено освобождение убедитесь, что перетаскиваемые данные к допустимому типу (в данном случае Text). Затем код задает эффект, который будет происходить при завершении перетаскивания в значение DragDropEffects перечисления. Дополнительные сведения см. в разделе Effect.Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter If (e.Data.GetDataPresent(DataFormats.Text)) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub
private void textBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.Text)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; }
Note
Можно определить собственные DataFormats , указав собственный объект как Object параметр SetData метод. При этом необходимо убедиться, что указанный объект является сериализуемым. Дополнительные сведения см. в разделе ISerializable.
В DragDrop событий для элемента управления, в которых будет выполняться перетаскивания, используйте GetData метод для получения перетаскиваемых данных. Дополнительные сведения см. в разделе Data.
В следующем примере TextBox управления является элементом управления, на который переносятся данные (в котором будет выполнено освобождение данных). В коде устанавливается Text свойство TextBox управления равным перетаскиваемым данным.
Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop TextBox1.Text = e.Data.GetData(DataFormats.Text).ToString End Sub
private void textBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { textBox1.Text = e.Data.GetData(DataFormats.Text).ToString(); }
Note
Кроме того, вы можете работать с KeyState свойство, поэтому, в зависимости от клавиш, нажатых во время операции перетаскивания и вставки, происходили определенные действия (например, происходит копирование переносимых данных при нажатии клавиши CTRL).