Exemplarische Vorgehensweise: Ausführen von Drag & Drop-Operationen in Windows Forms
Um Drag & Drop-Vorgänge in Windows-basierten Anwendungen auszuführen, müssen Sie eine Reihe von Ereignissen verarbeiten, insbesondere die Ereignisse DragEnter, DragLeave und DragDrop. Wenn Sie die Daten aus den Ereignisargumenten dieser Ereignisse verwenden, können Sie Drag & Drop-Vorgänge problemlos vereinfachen.
Ziehen von Daten
Drag & Drop-Vorgänge beginnen immer mit dem Ziehen (Dragging). Die Funktionalität, mit der Daten bei Beginn des Ziehvorgangs erfasst werden können, ist in der DoDragDrop-Methode implementiert.
Im folgenden Beispiel wird das MouseDown-Ereignis zum Starten des Ziehvorgangs verwendet, da es am intuitivsten ist. (Die meisten Drag & Drop-Vorgänge beginnen mit dem Drücken der Maustaste.) Beachten Sie dabei jedoch, dass für das Starten des Drag & Drop-Vorgangs jedes beliebige Ereignis verwendet werden kann.
Hinweis
Bestimmte Steuerelemente verfügen über benutzerdefinierte für Ziehvorgänge spezifische Ereignisse. Die Steuerelemente ListView und TreeView besitzen z. B. ein ItemDrag-Ereignis.
So starten Sie einen Zielvorgang
Legen Sie die zu ziehenden Daten und die zulässige Wirkung des Ziehvorgangs mithilfe der
DoDragDrop
-Methode in dem MouseDown-Ereignis des Steuerelements fest, in dem der Ziehvorgang beginnen soll. Weitere Informationen finden Sie unter Data und AllowedEffect.Im folgenden Beispiel wird gezeigt, wie ein Ziehvorgang gestartet wird. Das Steuerelement, in dem der Ziehvorgang beginnt, ist ein Button-Steuerelement, die gezogenen Daten sind die Zeichenfolge, die die Text-Eigenschaft des Button-Steuerelements darstellen, und die zulässigen Auswirkungen sind entweder Kopieren oder Verschieben.
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); }
Hinweis
In der
DoDragDrop
-Methode können beliebige Daten als Parameter verwendet werden. Im Beispiel oben wurde die Text-Eigenschaft des Button-Steuerelements verwendet (anstatt einen Wert fest zu codieren oder Daten aus einem Dataset abzurufen), da die Eigenschaft mit der Position verbunden war, von der gezogen wurde (das Button-Steuerelement). Dies sollte bei der Integration von Drag & Drop-Vorgängen in Windows-basierte Anwendungen stets beachtet werden.
Während ein Ziehvorgang durchgeführt wird, können Sie das QueryContinueDrag-Ereignis behandeln, das beim System „um Erlaubnis fragt“, ob der Ziehvorgang fortgesetzt werden kann. Die Behandlung dieser Methode bietet außerdem die Gelegenheit, Methoden aufzurufen, die sich auf den Ziehvorgang auswirken, z. B. das Erweitern eines TreeNode-Steuerelements in ein TreeView-Steuerelement, wenn mit dem Cursor darauf gezeigt wird.
Ablegen von Daten
Nachdem Sie begonnen haben, Daten von einer Stelle einer Windows Form oder eines Steuerelements zu ziehen, möchten Sie diese natürlich auch irgendwo ablegen (Dropping). Der Cursor verändert sich, wenn er über einen Bereich auf einem Formular oder Steuerelement bewegt wird, der für das Ablegen von Daten konfiguriert ist. Jeder Bereich in einem Windows-Formular oder Steuerelement kann so bearbeitet werden, dass er abgelegte Daten akzeptiert, indem die AllowDrop-Eigenschaft festgelegt wird und die Ereignisse DragEnter und DragDrop behandelt werden.
So führen Sie einen Ablegevorgang aus
Legen Sie die Eigenschaft AllowDrop auf „true“ fest.
Stellen Sie im
DragEnter
-Ereignis für das Steuerelement, in dem Sie die gezogenen Daten ablegen, sicher, dass diese einem zulässigen Typ entsprechen (in diesem Fall Text). Der Code legt nun die Wirkung fest, die eintritt, wenn der Ablegevorgang für einen Wert in der DragDropEffects-Enumeration auftritt. Weitere Informationen finden Sie unter 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; }
Hinweis
Sie können Ihre eigenen DataFormats definieren, indem Sie Ihr eigenes Objekt als Object-Parameter der SetData-Methode angeben. Stellen Sie dabei sicher, dass das angegebene Objekt serialisierbar ist. Weitere Informationen finden Sie unter ISerializable.
Verwenden Sie in dem DragDrop-Ereignis für das Steuerelement, in dem das Ablegen erfolgen wird, die GetData-Methode, um die Daten abzurufen, die gezogen werden. Weitere Informationen finden Sie unter Data.
Im folgenden Beispiel ist das Steuerelement, auf das die Daten gezogen werden (und auf dem der Ablegevorgang erfolgt), ein TextBox-Steuerelement. Der Code legt die Text-Eigenschaft des TextBox-Steuerelements auf die gezogenen Daten fest.
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(); }
Hinweis
Darüber hinaus können Sie die KeyState-Eigenschaft verwenden, sodass in Abhängigkeit von den während des Drag & Drop-Vorgangs gedrückten Tasten bestimmte Wirkungen erzielt werden. (So werden die gezogenen Daten beispielsweise beim Drücken der STRG-TASTE standardmäßig in die Zwischenablage kopiert.)
Weitere Informationen
.NET Desktop feedback
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für