Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Per eseguire operazioni di trascinamento della selezione all'interno di applicazioni basate su Windows, è necessario gestire una serie di eventi, in particolare gli eventi DragEnter, DragLeavee DragDrop. Usando le informazioni disponibili negli argomenti dell'evento di questi eventi, è possibile facilitare facilmente le operazioni di trascinamento della selezione.
Trascinamento dei dati
Tutte le operazioni di trascinamento iniziano con lo spostamento. La funzionalità per raccogliere i dati quando inizia il trascinamento viene implementata nel metodo DoDragDrop.
Nell'esempio seguente, l'evento MouseDown viene usato per avviare l'operazione di trascinamento perché è la più intuitiva (la maggior parte delle azioni di drag-and-drop inizia con il pulsante del mouse premuto). Tenere tuttavia presente che qualsiasi evento può essere usato per avviare una procedura di trascinamento della selezione.
Annotazioni
Alcuni controlli hanno eventi di trascinamento personalizzato. I controlli ListView e TreeView, ad esempio, hanno un evento ItemDrag.
Per avviare un'operazione di trascinamento
Nell'evento MouseDown per il controllo in cui inizierà il trascinamento, utilizzare il metodo
DoDragDrop
per impostare i dati da trascinare e l'effetto permesso del trascinamento. Per altre informazioni, vedere Data e AllowedEffect.Nell'esempio seguente viene illustrato come avviare un'operazione di trascinamento. Il controllo in cui inizia il trascinamento è un controllo Button, i dati trascinati sono la stringa che rappresenta la proprietà Text del controllo Button e gli effetti consentiti vengono copiati o spostati.
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); }
Annotazioni
Qualsiasi dato può essere utilizzato come parametro nel metodo
DoDragDrop
; nell'esempio precedente è stata utilizzata la proprietà Text del controllo Button (anziché codificare manualmente un valore o recuperare dati da un set di dati) perché la proprietà era correlata alla posizione da cui è stato trascinato l'elemento (il controllo Button). Tenere presente questo aspetto quando si incorporano operazioni di trascinamento della selezione nelle applicazioni basate su Windows.
Mentre è attiva un'operazione di trascinamento, è possibile gestire l'evento QueryContinueDrag, che "chiede l'autorizzazione" del sistema per continuare l'operazione di trascinamento. Quando si gestisce questo metodo, è anche il punto appropriato per chiamare i metodi che avranno un effetto sull'operazione di trascinamento, ad esempio espandendo un TreeNode in un controllo TreeView quando il cursore passa il mouse su di esso.
Eliminazione dei dati
Dopo aver iniziato a trascinare i dati da una posizione in un Windows Form o un controllo, naturalmente si vorrà rilasciarli da qualche parte. Il cursore cambierà quando attraversa un'area di una maschera o di un controllo configurato correttamente per il rilascio dei dati. Qualsiasi area all'interno di un Windows Form o di un controllo può essere resa in grado di accettare i dati rilasciati impostando la proprietà AllowDrop e gestendo gli eventi DragEnter e DragDrop.
Per eseguire un rilascio
Impostare la proprietà AllowDrop su true.
Nell'evento
DragEnter
del controllo in cui si verificherà il rilascio, assicurarsi che i dati trascinati siano di un tipo accettabile (in questo caso, Text). Il codice imposta quindi l'effetto che ha luogo quando avviene il rilascio a un valore nell'enumerazione DragDropEffects. Per altre informazioni, vedere 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; }
Annotazioni
È possibile definire DataFormats specificando il proprio oggetto come parametro Object del metodo SetData. Quando si esegue questa operazione, assicurarsi che l'oggetto specificato sia serializzabile. Per altre informazioni, vedere ISerializable.
Nell'evento DragDrop relativo al controllo dove avverrà il rilascio, utilizzate il metodo GetData per recuperare i dati che vengono trascinati. Per altre informazioni, vedere Data.
Nell'esempio seguente, un controllo TextBox è il controllo verso cui viene trascinato (dove avrà luogo il rilascio). Il codice imposta la proprietà Text del controllo TextBox uguale ai dati trascinati.
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(); }
Annotazioni
Inoltre, è possibile utilizzare la proprietà KeyState, in modo che, a seconda dei tasti depressi durante l'operazione di trascinamento della selezione, si verifichino determinati effetti (ad esempio, è standard copiare i dati trascinati quando viene premuto CTRL).
Vedere anche
.NET Desktop feedback