Freigeben über


Control.DragDrop-Ereignis

Tritt ein, wenn eine Drag & Drop-Operation beendet wurde.

Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)

Syntax

'Declaration
Public Event DragDrop As DragEventHandler
'Usage
Dim instance As Control
Dim handler As DragEventHandler

AddHandler instance.DragDrop, handler
public event DragEventHandler DragDrop
public:
event DragEventHandler^ DragDrop {
    void add (DragEventHandler^ value);
    void remove (DragEventHandler^ value);
}
/** @event */
public void add_DragDrop (DragEventHandler value)

/** @event */
public void remove_DragDrop (DragEventHandler value)
JScript unterstützt die Verwendung von Ereignissen, aber nicht die Deklaration von neuen Ereignissen.

Hinweise

Die X-Eigenschaft und die Y-Eigenschaft der DragEventArgs geben Bildschirmkoordinaten an, nicht Clientkoordinaten. Die folgende Visual C#-Codezeile wandelt die Eigenschaften in einen Client-Point um:

Point clientPoint = targetControl.PointToClient(new Point(de.X, de.Y));

Hinweis

Wenn Sie in Versionen vor Microsoft .NET Framework, Version 2.0 ein UserControl mit einem DragEnter-Ereignis und einem DragDrop-Ereignis auf einem Windows Form abgelegt haben und zur Entwurfszeit ein Element auf das UserControl gezogen haben, wurde das DropDrop-Ereignis und das DropEnter-Ereignis ausgelöst. Wenn Sie allerdings die Projektmappe schließen und erneut öffnen, werden das DragEnter-Ereignis und das DragDrop-Ereignis nicht mehr ausgelöst.

Weitere Informationen zum Behandeln von Ereignissen finden Sie unter Behandeln von Ereignissen.

Beispiel

Im folgenden Beispiel wird ein Drag & Drop-Vorgang zwischen zwei ListBox-Steuerelementen veranschaulicht. In diesem Beispiel wird die DoDragDrop-Methode aufgerufen, wenn der Ziehvorgang begonnen wird. Der Ziehvorgang beginnt, wenn die Maus um mehr als SystemInformation.DragSize von der Mausposition während des MouseDown-Ereignisses verschoben wurde. Mit der IndexFromPoint-Methode kann der Index des im MouseDown-Ereignis zu ziehenden Elements bestimmt werden.

Im Beispiel wird außerdem die Verwendung eines benutzerdefinierten Cursors bei einem Drag & Drop-Vorgang veranschaulicht. Bei diesem Beispiel müssen die beiden Cursordateien 3dwarro.cur und 3dwno.cur für den benutzerdefinierten Ziehcursor bzw. den Cursor, der angezeigt wird, wenn ein Ablegen nicht möglich ist, im Anwendungsverzeichnis vorhanden sein. Ein benutzerdefinierter Cursor wird verwendet, wenn die UseCustomCursorsCheckCheckBox aktiviert wurde. Ein benutzerdefinierter Cursor wird im GiveFeedback-Ereignishandler festgelegt.

Der Tastaturzustand wird vom DragOver-Ereignishandler für die rechte ListBox ausgewertet, um je nach Zustand der UMSCHALTTASTE oder von STRG, ALT bzw. STRG+ALT den auszuführenden Ziehvorgang zu ermitteln. Außerdem wird beim DragOver-Ereignis auch die Position in der ListBox bestimmt, für die der Ablegevorgang ausgeführt wird. Wenn die abzulegenden Daten kein String sind, wird der DragEventArgs.Effect in DragDropEffects auf den Wert None festgelegt. Abschließend wird der Status des Ablegevorgangs im DropLocationLabelLabel angezeigt.

Die in der rechten ListBox abzulegenden Daten werden im DragDrop-Ereignishandler bestimmt. Der String-Wert wird an der entsprechenden Stelle in die ListBox eingefügt. Wenn der Ziehvorgang außerhalb der Grenzen des Formulars beendet wird, wird der Drag & Drop-Vorgang im QueryContinueDrag-Ereignishandler abgebrochen.

In diesem Codeauszug wird die Verwendung des DragDrop-Ereignisses veranschaulicht. Das vollständige Codebeispiel finden Sie unter der DoDragDrop-Methode.

Private Sub ListDragTarget_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListDragTarget.DragDrop
    ' Ensures that the list item index is contained in the data.

    If (e.Data.GetDataPresent(GetType(System.String))) Then

        Dim item As Object = CType(e.Data.GetData(GetType(System.String)), System.Object)

        ' Perform drag-and-drop, depending upon the effect.
        If (e.Effect = DragDropEffects.Copy Or _
            e.Effect = DragDropEffects.Move) Then

            ' Insert the item.
            If (indexOfItemUnderMouseToDrop <> ListBox.NoMatches) Then
                ListDragTarget.Items.Insert(indexOfItemUnderMouseToDrop, item)
            Else
                ListDragTarget.Items.Add(item)

            End If
        End If
        ' Reset the label text.
        DropLocationLabel.Text = "None"
    End If
End Sub
private void ListDragTarget_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) 
{
    // Ensure that the list item index is contained in the data.
    if (e.Data.GetDataPresent(typeof(System.String))) {

        Object item = (object)e.Data.GetData(typeof(System.String));

        // Perform drag-and-drop, depending upon the effect.
        if (e.Effect == DragDropEffects.Copy ||
            e.Effect == DragDropEffects.Move) {
        
            // Insert the item.
            if (indexOfItemUnderMouseToDrop != ListBox.NoMatches)
                ListDragTarget.Items.Insert(indexOfItemUnderMouseToDrop, item);
            else
                ListDragTarget.Items.Add(item);
            
        }
    }
    // Reset the label text.
    DropLocationLabel.Text = "None";
}
void ListDragTarget_DragDrop( Object^ /*sender*/, System::Windows::Forms::DragEventArgs^ e )
{
   // Ensure that the list item index is contained in the data.
   if ( e->Data->GetDataPresent( System::String::typeid ) )
   {
      Object^ item = dynamic_cast<Object^>(e->Data->GetData( System::String::typeid ));
      
      // Perform drag-and-drop, depending upon the effect.
      if ( e->Effect == DragDropEffects::Copy || e->Effect == DragDropEffects::Move )
      {
         // Insert the item.
         if ( indexOfItemUnderMouseToDrop != ListBox::NoMatches )
                        ListDragTarget->Items->Insert( indexOfItemUnderMouseToDrop, item );
         else
                        ListDragTarget->Items->Add( item );
      }
   }

   // Reset the label text.
   DropLocationLabel->Text = "None";
}
private void listDragTarget_DragDrop(Object sender, 
    System.Windows.Forms.DragEventArgs e)
{
    // Ensure that the list item index is contained in the data.
    if (e.get_Data().GetDataPresent(String.class.ToType())) {
        Object item = (Object)(e.get_Data().GetData(
               String.class.ToType()));
        // Perform drag-and-drop, depending upon the effect.
        if (e.get_Effect().Equals(DragDropEffects.Copy) || 
            e.get_Effect().Equals(DragDropEffects.Move)) {
            // Insert the item.
            if (indexOfItemUnderMouseToDrop != ListBox.NoMatches) {
                listDragTarget.get_Items().Insert(
                    indexOfItemUnderMouseToDrop, item);
            }
            else {
                listDragTarget.get_Items().Add(item);
            }
        }
    }
    // Reset the label text.
    dropLocationLabel.set_Text("None");
} //listDragTarget_DragDrop

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

Siehe auch

Referenz

Control-Klasse
Control-Member
System.Windows.Forms-Namespace
OnDragDrop