Condividi tramite


Procedura dettagliata: Esecuzione di un'operazione di trascinamento della selezione in Windows Form

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

  1. 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

  1. Impostare la proprietà AllowDrop su true.

  2. 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.

  3. 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