Freigeben über


Exemplarische Vorgehensweise: Ausführen von Drag-and-Drop-Vorgängen 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-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

  1. 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

  1. Legen Sie die eigenschaft AllowDrop auf "true" fest.

  2. 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.

  3. 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