Sdílet prostřednictvím


Návod: Provedení 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, DragLeavea DragDrop. Prací s informacemi dostupnými v argumentech těchto událostí můžete snadno provést operace přetažení.

Přetahování dat

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

V následujícím příkladu se událost MouseDown 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á s tlačítkem myši, které je stisknuté). Mějte však na paměti, že jakákoli událost může být použita k zahájení procesu přetahování.

Poznámka

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

Zahájit přetažení

  1. Při události MouseDown pro ovládací prvek, kde tažení začne, použijte metodu DoDragDrop k nastavení dat, která mají být přetažena, a určete povolený efekt, který má mít přetažení. Další informace najdete v tématu 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í, je ovládací prvek Button, přetažená data tvoří řetězec vyjadřující vlastnost Text ovládacího prvku Button a povolené efekty jsou buď kopírování, nebo přesunutí.

    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 použít jako parametr v metodě DoDragDrop; V předchozím příkladu se použila vlastnost Text ovládacího prvku Button (místo pevného kódování hodnoty nebo načítání dat z datové sady), protože vlastnost souvisela s přetahováním umístění (ovládací prvek Button). Pamatujte na to, až budete začleňovat operace přetahování do aplikací běžících na Windows.

I když probíhá operace přetažení, můžete zpracovat událost QueryContinueDrag, která "žádá o svolení" systému k pokračování operace 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í TreeNode v ovládacím prvku TreeView, když na něj kurzor 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ž přechází přes oblast formuláře nebo ovládacího prvku, který je správně nakonfigurovaný pro přetažení dat. Pomocí nastavení vlastnosti AllowDrop a zpracování událostí DragEnter a DragDrop je možné libovolnou oblast v rámci Windows Form nebo ovládacího prvku připravit pro přijímání vložených dat.

Provedení poklesu

  1. Nastavte vlastnost AllowDrop na hodnotu true.

  2. Při události DragEnter ovládacího prvku, kde dojde k přetažení, se ujistěte, že přetahovaná data 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 DragDropEffects výčtu. Další informace najdete v tématu 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í DataFormats můžete definovat zadáním vlastního objektu jako parametru Object metody SetData. Při tomto provedení se ujistěte, že zadaný objekt je serializovatelný. Další informace najdete v tématu ISerializable.

  3. V události DragDrop pro ovládací prvek, kde dojde k přetažení, použijte metodu GetData k načtení přetahovaných dat. Další informace najdete v tématu Data.

    V následujícím příkladu je ovládací prvek TextBox cílovým prvkem, kam je ovládací prvek přetahován (kde dojde k upuštění). Kód nastaví vlastnost Text ovládacího prvku TextBox, 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 vlastností KeyState, 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řetahovaná data při stisknutí klávesy CTRL).

Viz také