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
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
.NET Desktop feedback