Show / Hide Table of Contents

Пошаговое руководство. Выполнение операции перетаскивания в Windows Forms

Для выполнения операций перетаскивания и вставки в приложениях Windows необходимо обрабатывать последовательность событий, особенно DragEnter, DragLeave, и DragDrop события. Работая со сведениями, доступными через аргументы этих событий, можно значительно упростить операции перетаскивания.

Перетаскивание данных

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

В следующем примере MouseDown событие используется для начала операции перетаскивания, так как он является самым удобным (большинство операций перетаскивания и вставки начинаются с кнопкой мыши). Однако не забывайте, что любое событие может использоваться для инициализации процедуры перетаскивания.

Note

Некоторые элементы управления имеют собственные события перетаскивания. ListView И TreeView элементов управления, например, быть ItemDrag событий.

Начало операции перетаскивания

  1. В 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 события.

Завершение операции перетаскивания

  1. Задайте AllowDrop присваивается значение true.

  2. В 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.

  3. В 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).

См. также

  • Практическое руководство. Добавление данных в буфер обмена
  • Практическое руководство. Извлечение данных из буфера обмена
  • Операции перетаскивания и поддержка буфера обмена
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX