Übersicht über das Drag-&-Drop-Mausverhalten (Windows Forms .NET)

Windows Forms umfasst eine Reihe von Methoden, Ereignissen und Klassen, die das Drag & Drop-Verhalten implementieren. Dieses Thema enthält eine Übersicht über die Drag & Drop-Unterstützung in Windows Forms.

Wichtig

Der Desktopleitfaden zu .NET 7 und .NET 6 ist in Bearbeitung.

Drag & Drop-Ereignisse

Es gibt zwei Kategorien von Ereignissen in einem Drag & Drop-Vorgang: Ereignisse, die im aktuellen Ziel des Drag & Drop-Vorgangs auftreten, und Ereignisse, die in der Quelle des Drag & Drop-Vorgangs auftreten. Sie müssen diese Ereignisse verarbeiten, um Drag & Drop-Vorgänge auszuführen. Wenn Sie die Daten aus den Ereignisargumenten dieser Ereignisse verwenden, können Sie Drag & Drop-Vorgänge problemlos vereinfachen.

Ereignisse im aktuellen Ablageziel

Die folgende Tabelle zeigt die Ereignisse, die im aktuellen Ziel eines Drag & Drop--Vorgangs auftreten.

Mausereignis BESCHREIBUNG
DragEnter Dieses Ereignis tritt auf, wenn ein Objekt in die Begrenzungen des Steuerelements gezogen wird. Der Handler für dieses Ereignis empfängt ein Argument des Typs DragEventArgs.
DragOver Dieses Ereignis tritt auf, wenn ein Objekt gezogen wird, während sich der Mauszeiger innerhalb der Grenzen des Steuerelements befindet. Der Handler für dieses Ereignis empfängt ein Argument des Typs DragEventArgs.
DragDrop Dieses Ereignis tritt auf, wenn ein Drag & Drop-Vorgang abgeschlossen wurde. Der Handler für dieses Ereignis empfängt ein Argument des Typs DragEventArgs.
DragLeave Dieses Ereignis tritt auf, wenn ein Objekt über die Grenzen des Steuerelements nach außen gezogen wird. Der Handler für dieses Ereignis empfängt ein Argument des Typs EventArgs.

Die DragEventArgs-Klasse stellt die Position des Mauszeigers, den aktuellen Zustand der Maustasten und der Zusatztasten der Tastatur, die gezogenen Daten und die DragDropEffects-Werte bereit, die die Vorgänge, die für die Quelle des Ziehereignisses zulässig sind, sowie den Zielablegeeffekt für den Vorgang angeben.

Ereignisse in der Ablagequelle

Die folgende Tabelle zeigt die Ereignisse, die in der Quelle eines Drag & Drop-Vorgangs auftreten.

Mausereignis BESCHREIBUNG
GiveFeedback Dieses Ereignis tritt während eines Ziehvorgangs auf. Es bietet die Möglichkeit, dem Benutzer einen visuellen Hinweis zu geben, dass der Drag & Drop-Vorgang auftritt, z. B. Ändern des Mauszeigers. Der Handler für dieses Ereignis empfängt ein Argument des Typs GiveFeedbackEventArgs.
QueryContinueDrag Dieses Ereignis wird während eines Drag & Drop-Vorgangs ausgelöst. Dadurch kann die Quelle des Ziehvorgangs bestimmen, ob der Drag & Drop-Vorgang abgebrochen werden soll. Der Handler für dieses Ereignis empfängt ein Argument des Typs QueryContinueDragEventArgs.

Die QueryContinueDragEventArgs-Klasse stellt Folgendes bereit: den aktuellen Zustand der Maus und der Zusatztasten der Tastatur, einen Wert, der angibt, ob die ESC-Taste gedrückt wurde, und einen DragAction-Wert, der festgelegt werden kann, um anzugeben, ob der Drag & Drop-Vorgang fortgesetzt werden soll.

Ausführen von Drag & Drop-Vorgängen

Drag & Drop-Vorgänge umfassen immer zwei Komponenten: die Ziehquelle und das Ablageziel. Sie müssen ein Steuerelement als Quelle festlegen und das MouseDown-Ereignis verarbeiten, um einen Drag & Drop-Vorgang starten zu können. Rufen Sie im Ereignishandler die DoDragDrop-Methode auf, die die Daten bereitstellt, die der Ablage und dem DragDropEffects-Wert zugeordnet sind.

Legen Sie die AllowDrop-Eigenschaft des Zielsteuerelements auf true fest, damit dieses Steuerelement einen Drag & Drop-Vorgang annehmen kann. Das Ziel verarbeitet zwei Ereignisse. Zuerst wird ein Ereignis als Reaktion auf das Ziehen über das Steuerelement verarbeitet (z. B. DragOver). Danach wird ein zweites Ereignis verarbeitet, bei dem es sich um die Ablageaktion selbst handelt (DragDrop).

Das folgenden Beispiel veranschaulicht das Ziehen von einem Label-Steuerelement in ein TextBox. Wenn der Ziehvorgang abgeschlossen ist, antwortet das TextBox, indem es sich den Text der Bezeichnung selbst zuweist.

// Initiate the drag
private void label1_MouseDown(object sender, MouseEventArgs e) =>
    DoDragDrop(((Label)sender).Text, DragDropEffects.All);

// Set the effect filter and allow the drop on this control
private void textBox1_DragOver(object sender, DragEventArgs e) =>
    e.Effect = DragDropEffects.All;

// React to the drop on this control
private void textBox1_DragDrop(object sender, DragEventArgs e) =>
    textBox1.Text = (string)e.Data.GetData(typeof(string));
' Initiate the drag
Private Sub Label1_MouseDown(sender As Object, e As MouseEventArgs)
    DoDragDrop(DirectCast(sender, Label).Text, DragDropEffects.All)
End Sub

' Set the effect filter and allow the drop on this control
Private Sub TextBox1_DragOver(sender As Object, e As DragEventArgs)
    e.Effect = DragDropEffects.All
End Sub

' React to the drop on this control
Private Sub TextBox1_DragDrop(sender As Object, e As DragEventArgs)
    TextBox1.Text = e.Data.GetData(GetType(String))
End Sub

Weitere Informationen zu den Effekten von Ziehvorgängen finden Sie unter Data und AllowedEffect.

Siehe auch