Пошаговое руководство. Выполнение операции перетаскивания в Windows FormsWalkthrough: Performing a Drag-and-Drop Operation in Windows Forms

Для выполнения операций перетаскивания в приложениях на основе Windows необходимо выполнить обработку ряда событий, особенно DragEnterсобытий, DragLeaveи DragDrop .To perform drag-and-drop operations within Windows-based applications you must handle a series of events, most notably the DragEnter, DragLeave, and DragDrop events. Работая со сведениями, доступными через аргументы этих событий, можно значительно упростить операции перетаскивания.By working with the information available in the event arguments of these events, you can easily facilitate drag-and-drop operations.

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

Все операции перетаскивания начинаются с переноса данных.All drag-and-drop operations begin with dragging. Функция, позволяющая собирать данные при начале перетаскивания, реализуется в DoDragDrop методе.The functionality to enable data to be collected when dragging begins is implemented in the DoDragDrop method.

В следующем примере MouseDown событие используется для запуска операции перетаскивания, поскольку она является наиболее интуитивно понятной (большинство действий по перетаскиванию начинается с нажатия кнопки мыши).In the following example, the MouseDown event is used to start the drag operation because it is the most intuitive (most drag-and-drop actions begin with the mouse button being depressed). Однако не забывайте, что любое событие может использоваться для инициализации процедуры перетаскивания.However, remember that any event could be used to initiate a drag-and-drop procedure.

Примечание

Некоторые элементы управления имеют собственные события перетаскивания.Certain controls have custom drag-specific events. Для элементов TreeView управления ListView и, например, имеется событие. ItemDragThe ListView and TreeView controls, for example, have an ItemDrag event.

Начало операции перетаскиванияTo start a drag operation

  1. В событии для элемента управления, в котором начнется перетаскивание, DoDragDrop используйте метод, чтобы задать перетаскиваемые данные и разрешить перетаскивание разрешенных эффектов. MouseDownIn the MouseDown event for the control where the drag will begin, use the DoDragDrop method to set the data to be dragged and the allowed effect dragging will have. Дополнительные сведения см. в разделах Data и AllowedEffect.For more information, see Data and AllowedEffect.

    В следующем примере показан запуск операции перетаскивания.The following example shows how to initiate a drag operation. Элемент управления, в котором начинается перетаскивание Button , является элементом управления, перетаскиваемые данные — это строка, Text представляющая свойство Button элемента управления, и разрешенные эффекты можно копировать или перемещать.The control where the drag begins is a Button control, the data being dragged is the string representing the Text property of the Button control, and the allowed effects are either copying or moving.

    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);  
    }  
    

    Примечание

    В качестве параметра в DoDragDrop методе можно использовать любые данные. в приведенном выше Text примере используется свойство Button элемента управления (вместо жесткого кодирования значения или извлечения данных из набора данных), поскольку свойство было связано с Расположение перетаскивается из ( Button элемент управления).Any data can be used as a parameter in the DoDragDrop method; in the example above, the Text property of the Button control was used (rather than hard-coding a value or retrieving data from a dataset) because the property was related to the location being dragged from (the Button control). Учитывайте это при реализации операций перетаскивания в приложениях Windows.Keep this in mind as you incorporate drag-and-drop operations into your Windows-based applications.

Пока действует операция перетаскивания, можно выполнить обработку QueryContinueDrag события, которое "запрашивает разрешение" системы, чтобы продолжить операцию перетаскивания.While a drag operation is in effect, you can handle the QueryContinueDrag event, which "asks permission" of the system to continue the drag operation. При обработке этого метода также является подходящая точка для вызова методов, которые влияют на операцию перетаскивания, например, расширение объекта TreeNode TreeView в элементе управления при наведении курсора мыши на него.When handling this method, it is also the appropriate point for you to call methods that will have an effect on the drag operation, such as expanding a TreeNode in a TreeView control when the cursor hovers over it.

Завершение перетаскивания данныхDropping Data

После начала перетаскивания данных из расположения в форме Windows Forms или элементе управления их требуется куда-то поместить.Once you have begun dragging data from a location on a Windows Form or control, you will naturally want to drop it somewhere. При попадании курсора в область формы или элемента управления, которые правильно настроены для размещения данных, вид курсора изменится.The cursor will change when it crosses an area of a form or control that is correctly configured for dropping data. Любая область внутри формы или элемента управления Windows может быть сделана для приема пропущенных данных путем AllowDrop установки свойства и DragEnter обработки событий DragDrop и.Any area within a Windows Form or control can be made to accept dropped data by setting the AllowDrop property and handling the DragEnter and DragDrop events.

Завершение операции перетаскиванияTo perform a drop

  1. Присвойте AllowDrop свойству значение true.Set the AllowDrop property to true.

  2. В событии для элемента управления, в котором будет выполняться перетаскивание, убедитесь, что перетаскиваемые данные имеют допустимый тип (в данном Textслучае). DragEnterIn the DragEnter event for the control where the drop will occur, ensure that the data being dragged is of an acceptable type (in this case, Text). Затем код задает результат, который будет выполняться при выполнении перетаскивания в значение в DragDropEffects перечислении.The code then sets the effect that will happen when the drop occurs to a value in the DragDropEffects enumeration. Дополнительные сведения см. в разделе Effect.For more information, see 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;  
    }  
    

    Примечание

    Вы можете определить собственное DataFormats , указав собственный объект в Object качестве параметра SetData метода.You can define your own DataFormats by specifying your own object as the Object parameter of the SetData method. При этом необходимо убедиться, что указанный объект является сериализуемым.Be sure, when doing this, that the object specified is serializable. Дополнительные сведения см. в разделе ISerializable.For more information, see ISerializable.

  3. В событии для элемента управления, в котором будет выполняться удаление, GetData используйте метод для получения перетаскиваемых данных. DragDropIn the DragDrop event for the control where the drop will occur, use the GetData method to retrieve the data being dragged. Дополнительные сведения см. в разделе Data.For more information, see Data.

    В приведенном ниже TextBox примере элемент управления — это элемент управления, к которому выполняется перетаскивание (где произойдет удаление).In the example below, a TextBox control is the control being dragged to (where the drop will occur). Код задает Text свойство TextBox элемента управления, равное перетаскиваемых данным.The code sets the Text property of the TextBox control equal to the data being dragged.

    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();  
    }  
    

    Примечание

    Кроме того, можно работать со KeyState свойством, чтобы, в зависимости от нажатых клавиш во время операции перетаскивания, были выполнены определенные эффекты (например, для копирования перетаскиваемых данных при нажатии клавиши CTRL).Additionally, you can work with the KeyState property, so that, depending on keys depressed during the drag-and-drop operation, certain effects occur (for example, it is standard to copy the dragged data when the CTRL key is pressed).

См. такжеSee also