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í
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
Nastavte vlastnost AllowDrop na hodnotu true.
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.
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é
.NET Desktop feedback