Condividi tramite


Panoramica del comportamento del mouse nel drag-and-drop (Windows Forms .NET)

Windows Forms include una serie di metodi, eventi e classi che implementano il comportamento di trascinamento e rilascio. In questo argomento è fornita una panoramica del supporto per il trascinamento della selezione nei Windows Forms.

Eventi di trascinamento e rilascio

Esistono due categorie di eventi in un'operazione di trascina e rilascia: eventi che si verificano sulla destinazione attuale dell'operazione di trascina e rilascia e eventi che si verificano sull'origine dell'operazione di trascina e rilascia. Per eseguire operazioni di trascinamento e rilascio, è necessario gestire questi eventi. Usando le informazioni disponibili negli argomenti dell'evento di questi eventi, è possibile facilitare facilmente le operazioni di trascinamento della selezione.

Eventi nella destinazione attuale di rilascio

Nella tabella seguente vengono illustrati gli eventi che si verificano sull'obiettivo corrente di un'operazione di trascinamento e rilascio.

Evento mouse Descrizione
DragEnter Questo evento si verifica quando un oggetto viene trascinato nei limiti del controllo. Il gestore per questo evento riceve un argomento di tipo DragEventArgs.
DragOver Questo evento si verifica quando un oggetto viene trascinato mentre il puntatore del mouse si trova all'interno dei limiti del controllo. Il gestore di questo evento riceve un argomento di tipo DragEventArgs.
DragDrop Questo evento si verifica quando viene completata un'operazione di trascinamento della selezione (drag-and-drop). Il gestore per questo evento riceve un argomento di tipo DragEventArgs.
DragLeave Questo evento si verifica quando un oggetto viene trascinato fuori dai limiti del controllo. Il gestore di questo evento riceve un argomento di tipo EventArgs.

La classe DragEventArgs fornisce la posizione del puntatore del mouse, lo stato corrente dei pulsanti del mouse e i tasti di modifica della tastiera, i dati trascinati e i valori DragDropEffects che specificano le operazioni consentite dall'origine dell'evento di trascinamento e l'effetto di rilascio di destinazione per l'operazione.

Eventi nell'origine di rilascio

Nella tabella seguente vengono mostrati gli eventi che si verificano nella sorgente dell'operazione di trascinamento della selezione.

Evento Mouse Descrizione
GiveFeedback Questo evento si verifica durante un'operazione di trascinamento. Offre l'opportunità di fornire un segnale visivo all'utente che è in corso un'operazione di trascinamento, come ad esempio la modifica del puntatore del mouse. Il gestore di questo evento riceve un argomento di tipo GiveFeedbackEventArgs.
QueryContinueDrag Questo evento viene generato durante un'operazione di trascinamento della selezione e consente all'origine di trascinamento di determinare se l'operazione di trascinamento della selezione deve essere annullata. Il gestore per questo evento riceve un argomento di tipo QueryContinueDragEventArgs.

La classe QueryContinueDragEventArgs fornisce lo stato corrente dei pulsanti del mouse e dei tasti modificatori della tastiera, un valore che specifica se il tasto ESC è stato premuto e un valore DragAction, che può essere impostato per determinare se l'operazione di trascinamento deve continuare.

Esecuzione del trascinamento

Le operazioni di trascinamento della selezione coinvolgono sempre due componenti, il di origine di trascinamento e la destinazione di rilascio. Per avviare un'operazione di trascinamento della selezione, designare un controllo come origine e gestire l'evento MouseDown. Nel gestore eventi chiamare il metodo DoDragDrop che fornisce i dati associati al drop e un valore DragDropEffects.

Impostare la proprietà AllowDrop del controllo di destinazione su true per consentire a tale controllo di accettare un'operazione di trascinamento della selezione. La destinazione gestisce due eventi: il primo è un evento in risposta al trascinamento sul controllo, ad esempio DragOver. E un secondo evento che è l'azione di rilascio stessa, DragDrop.

Nell'esempio seguente viene illustrato un trascinamento da un controllo Label a TextBox. Al termine del trascinamento, il TextBox risponde assegnando il testo dell'etichetta a se stesso.

// Initiate the drag
private void label1_MouseDown(object sender, MouseEventArgs e) =>
    DoDragDrop(((Label)sender).Text, DragDropEffects.All);

// Set the effect filter and allow the drop on this control
private void textBox1_DragOver(object sender, DragEventArgs e) =>
    e.Effect = DragDropEffects.All;

// React to the drop on this control
private void textBox1_DragDrop(object sender, DragEventArgs e) =>
    textBox1.Text = (string)e.Data.GetData(typeof(string));
' Initiate the drag
Private Sub Label1_MouseDown(sender As Object, e As MouseEventArgs)
    DoDragDrop(DirectCast(sender, Label).Text, DragDropEffects.All)
End Sub

' Set the effect filter and allow the drop on this control
Private Sub TextBox1_DragOver(sender As Object, e As DragEventArgs)
    e.Effect = DragDropEffects.All
End Sub

' React to the drop on this control
Private Sub TextBox1_DragDrop(sender As Object, e As DragEventArgs)
    TextBox1.Text = e.Data.GetData(GetType(String))
End Sub

Per altre informazioni sugli effetti di trascinamento, vedere Data e AllowedEffect.

Vedere anche