Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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-and-Drop-Vorgänge problemlos vereinfachen.
Ziehen von Daten
Drag-and-Drop-Vorgänge beginnen immer mit dem Ziehen (Dragging). Die Funktionalität, die es ermöglicht, dass Daten gesammelt werden, wenn das Ziehen beginnt, ist in der DoDragDrop-Methode implementiert.
Im folgenden Beispiel wird das MouseDown-Ereignis verwendet, um den Ziehvorgang zu starten, da es am intuitivsten ist (die meisten Drag-and-Drop-Aktionen beginnen damit, dass die Maustaste gedrückt wird). Denken Sie jedoch daran, dass jedes Ereignis verwendet werden kann, um eine Drag-and-Drop-Prozedur zu initiieren.
Anmerkung
Bestimmte Steuerelemente verfügen über benutzerdefinierte, für Ziehvorgänge spezifische Ereignisse. Die Steuerelemente ListView und TreeView besitzen beispielsweise ein ItemDrag-Ereignis.
Starten eines Ziehvorgangs
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 darstellt, und die zulässigen Auswirkungen sind entweder Kopier- oder Verschiebungsvorgänge.
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); }
Anmerkung
In der
DoDragDrop
-Methode können beliebige Daten als Parameter verwendet werden. Im vorherigen Beispiel wurde die Text-Eigenschaft des Button-Steuerelements verwendet (anstelle der Hartcodierung eines Werts oder des Abrufens von Daten aus einem Dataset), da die Eigenschaft mit der Position verbunden war, von der gezogen wurde (Button-Steuerelement). Beachten Sie dies, wenn Sie Drag-and-Drop-Vorgänge in Ihre Windows-basierten Anwendungen integrieren.
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 in einem 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.
Ausführen eines Ablegevorgangs
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; }
Anmerkung
Sie können ein eigenes DataFormats definieren, indem Sie ein eigenes Objekt als Object-Parameter der SetData-Methode angeben. Stellen Sie bei diesem Vorgang sicher, dass das angegebene Objekt serialisierbar ist. Weitere Informationen finden Sie unter ISerializable.
Verwenden Sie im DragDrop-Ereignis für das Steuerelement, in dem das Ablegen erfolgen wird, die GetData-Methode zum Abrufen der zu ziehenden Daten. 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(); }
Anmerkung
Darüber hinaus können Sie die KeyState-Eigenschaft verwenden, sodass in Abhängigkeit von den während des Drag-and-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.)
Siehe auch
.NET Desktop feedback