Sdílet prostřednictvím


Návod: Provádění operace přetažení ve Windows Forms

Chcete-li provádět operace přetažení v aplikacích založených na systému Windows, musíte zpracovat řadu událostí, zejména DragEnter, a DragLeaveDragDrop událostí. Díky práci s informacemi dostupnými v argumentech událostí těchto událostí můžete snadno usnadnit operace přetažení.

Přetahování dat

Všechny operace přetažení začínají přetažením. Funkce umožňující shromažďování dat při přetažení začátku je implementována DoDragDrop v metodě.

V následujícím příkladu MouseDown se událost používá ke spuštění operace přetažení, protože je to nejtuitivnější (většina akcí přetažení začíná tlačítkem myši je deprimovaná). Mějte však na paměti, že jakákoli událost by mohla být použita k zahájení procedury přetažení myší.

Poznámka:

Některé ovládací prvky mají vlastní události specifické pro přetažení. TreeView Například ovládací ListView prvky mají ItemDrag událost.

Spuštění operace přetažení

  1. MouseDown V případě ovládacího prvku, kde bude přetažení začínat, použijte metodu DoDragDrop k nastavení dat, která mají být přetažena, a povolené efekt přetažení bude mít. Další informace najdete v tématech Data a AllowedEffect.

    Následující příklad ukazuje, jak zahájit operaci přetažení. Ovládací prvek, kde začíná přetažení, Button je ovládací prvek, data přetažená je řetězec představující Text vlastnost Button ovládacího prvku a povolené efekty jsou zkopírovány nebo přesunuty.

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

    Poznámka:

    Jakákoli data lze v DoDragDrop metodě použít jako parametr. V předchozím Text příkladu se použila vlastnost Button ovládacího prvku (nikoli pevně zakódovat hodnotu nebo načíst data z datové sady), protože vlastnost souvisela s umístěním, ze kterého se přetahuje ( Button ovládací prvek). Mějte na paměti, že při začlenění operací přetažení do aplikací založených na Windows.

I když je operace přetažení účinná, můžete zpracovat QueryContinueDrag událost, která "požádá o oprávnění" systému, aby pokračovala v operaci přetažení. Při zpracování této metody je také vhodným bodem volání metod, které budou mít vliv na operaci přetažení, například rozbalení TreeNodeTreeView ovládacího prvku, když kurzor na něj najede myší.

Vyřazení dat

Jakmile začnete přetahovat data z umístění ve formuláři Windows Form nebo ovládacím prvku, budete je přirozeně chtít někam umístit. Kurzor se změní, když protíná oblast formuláře nebo ovládacího prvku, který je správně nakonfigurovaný pro vyřazení dat. Pomocí nastavení AllowDrop vlastnosti a zpracování DragEnterDragDrop událostí lze provést libovolnou oblast v rámci formuláře nebo ovládacího prvku Windows Form nebo ovládacího prvku.

Provedení poklesu

  1. AllowDrop Nastavte vlastnost na true.

  2. DragEnter V případě ovládacího prvku, ve kterém dojde k přetažení, se ujistěte, že data přetahovaná jsou přijatelného typu (v tomto případě Text). Kód pak nastaví efekt, který se stane, když dojde k poklesu na hodnotu v výčtu DragDropEffects . Další informace najdete na webu 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;  
    }  
    

    Poznámka:

    Vlastní můžete definovat DataFormats zadáním vlastního objektu Object jako parametru SetData metody. Při tomto provedení se ujistěte, že zadaný objekt je serializovatelný. Další informace najdete na webu ISerializable.

  3. DragDrop V případě ovládacího prvku, kde dojde k přetažení, použijte metodu GetData k načtení přetahovaných dat. Další informace najdete na webu Data.

    V následujícím příkladu TextBox je ovládací prvek přetažen do (kde dojde k přetažení). Kód nastaví Text vlastnost TextBox ovládacího prvku, který se rovná přetahování dat.

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

    Poznámka:

    Kromě toho můžete pracovat s KeyState vlastností, takže v závislosti na klávesách stisknutou během operace přetažení dojde k určitým efektům (například je standardní kopírovat přetažená data při stisknutí klávesy CTRL).

Viz také