Dela via


Genomgång: Utföra en dra och släpp-åtgärd i Windows-formulär

Om du vill utföra dra och släpp-åtgärder i Windows-baserade program måste du hantera en serie händelser, särskilt DragEnter, DragLeaveoch DragDrop händelser. Genom att arbeta med den information som är tillgänglig i händelseargumenten för dessa händelser kan du enkelt underlätta dra-och-släpp-åtgärder.

Dra data

Alla dra och släpp-åtgärder börjar med att dra. Funktionaliteten för att möjliggöra insamling av data när dragningen påbörjas implementeras i metoden DoDragDrop.

I följande exempel används händelsen MouseDown för att starta dragåtgärden eftersom den är den mest intuitiva (de flesta dra och släpp-åtgärder börjar med att musknappen är nedtryckt). Kom dock ihåg att alla händelser kan användas för att initiera en dra och släpp-procedur.

Not

Vissa kontroller har anpassade dragspecifika händelser. Kontrollerna ListView och TreeView har till exempel en ItemDrag händelse.

Starta en dragåtgärd

  1. I MouseDown-händelsen för den kontroll där dra och släpp ska börja använder du DoDragDrop-metoden för att ange vilka data som ska dras och den tillåtna effekten av dragningen. Mer information finns i Data och AllowedEffect.

    I följande exempel visas hur du initierar en dragåtgärd. Kontrollen där dra börjar är en Button-kontroll, datan som dras är strängen som representerar egenskapen Text för Button-kontrollen, och de tillåtna effekterna är antingen kopiering eller flyttning.

    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);  
    }  
    

    Anteckning

    Alla data kan användas som en parameter i metoden DoDragDrop; I exemplet ovan användes egenskapen Text för den Button kontrollen (i stället för att hårdkoda ett värde eller hämta data från en datauppsättning) eftersom egenskapen var relaterad till den plats som drogs från (Button kontroll). Tänk på detta när du införlivar dra och släpp-åtgärder i dina Windows-baserade program.

Medan en dragåtgärd är i kraft kan du hantera händelsen QueryContinueDrag, som "ber om behörighet" för systemet för att fortsätta dra åtgärden. När du hanterar den här metoden är det också den rätta tiden för dig att anropa metoder som påverkar dragåtgärden, till exempel att expandera en TreeNode-kontroll i en TreeView när markören svävar över denna.

Ta bort data

När du har börjat dra data från en plats i ett Windows-formulär eller en kontroll, vill du naturligtvis släppa dem någonstans. Markören ändras när den korsar ett område i ett formulär eller en kontroll som är korrekt konfigurerad för att släppa data. Alla områden i ett Windows-formulär eller -kontroll kan göras för att acceptera borttagna data genom att ange egenskapen AllowDrop och hantera händelserna DragEnter och DragDrop.

Att utföra en drop

  1. Ange egenskapen AllowDrop till true.

  2. I den DragEnter händelsen för kontrollen där släppet ska ske kontrollerar du att de data som dras är av en acceptabel typ (i det här fallet Text). Koden anger sedan den effekt som inträffar när släppet sker till ett värde i DragDropEffects-uppräkningen. Mer information finns i 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;  
    }  
    

    Anteckning

    Du kan definiera dina egna DataFormats genom att ange ditt eget objekt som Object parameter för metoden SetData. Se till att det angivna objektet är serialiserbart. Mer information finns i ISerializable.

  3. Vid DragDrop-händelsen för kontrollen där släppet inträffar använder du metoden GetData för att hämta de uppgifter som dras. Mer information finns i Data.

    I exemplet nedan är en TextBox kontroll kontrollen som dras till (där släppet sker). Koden anger egenskapen Text för TextBox-kontrollen som är lika med de data som dras.

    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();  
    }  
    

    Notera

    Dessutom kan du arbeta med egenskapen KeyState, så att vissa effekter uppstår beroende på tangenterna som är nedtryckta under dra och släpp-åtgärden (till exempel är det standard att kopiera de data som dras när CTRL-tangenten trycks ned).

Se även