Omówienie zachowania myszy podczas operacji przeciągania i upuszczania (Windows Forms .NET)
Formularze systemu Windows zawierają zestaw metod, zdarzeń i klas, które implementują zachowanie przeciągania i upuszczania. Ten temat zawiera omówienie obsługi przeciągania i upuszczania w formularzach systemu Windows.
Zdarzenia przeciągania i upuszczania
Istnieją dwie kategorie zdarzeń w operacji przeciągania i upuszczania: zdarzenia występujące na bieżącym elemencie docelowym operacji przeciągania i upuszczania oraz zdarzenia występujące na źródle operacji przeciągania i upuszczania. Aby wykonać operacje przeciągania i upuszczania, należy obsłużyć te zdarzenia. Pracując z informacjami dostępnymi w argumentach tych zdarzeń, można ułatwić operacje przeciągania i upuszczania.
Zdarzenia dla bieżącego miejsca docelowego upuszczania
W poniższej tabeli przedstawiono zdarzenia występujące na bieżącym celu operacji przeciągania i upuszczania.
Zdarzenie myszy | Opis |
---|---|
DragEnter | To zdarzenie występuje, gdy obiekt jest przeciągany do granic kontrolki. Obsługa dla tego zdarzenia otrzymuje argument typu DragEventArgs. |
DragOver | Zdarzenie to ma miejsce, gdy obiekt jest przeciągany, a wskaźnik myszy znajduje się w obrębie kontrolki. Procedura obsługi dla tego zdarzenia otrzymuje argument typu DragEventArgs. |
DragDrop | Zdarzenie to występuje po zakończeniu operacji przeciągania i upuszczania. Procedura obsługująca to zdarzenie otrzymuje argument typu DragEventArgs. |
DragLeave | To zdarzenie występuje, gdy obiekt jest przeciągany z granic kontrolki. Procedura obsługi dla tego zdarzenia otrzymuje argument typu EventArgs. |
Klasa DragEventArgs dostarcza informacji o lokalizacji wskaźnika myszy, bieżącym stanie przycisków myszy i klawiszy modyfikujących klawiatury, danych przeciąganych oraz wartościach DragDropEffects, które określają dozwolone operacje przez źródło zdarzenia przeciągania i efekt upuszczania w miejscu docelowym dla operacji.
Zdarzenia w źródle upuszczania
W poniższej tabeli przedstawiono zdarzenia występujące w źródle operacji przeciągania i upuszczania.
Zdarzenie myszy | Opis |
---|---|
GiveFeedback | To zdarzenie występuje podczas operacji przeciągania. Daje to możliwość zapewnienia użytkownikowi wskazówek wizualnych, że odbywa się operacja przeciągania i upuszczania, na przykład poprzez zmianę wskaźnika myszy. Procedura obsługi zdarzenia dla tego zdarzenia otrzymuje argument typu GiveFeedbackEventArgs. |
QueryContinueDrag | To zdarzenie jest wywoływane podczas operacji przeciągania i upuszczania i umożliwia źródłu przeciągania określenie, czy należy anulować operację. Procedura obsługi dla tego zdarzenia otrzymuje argument typu QueryContinueDragEventArgs. |
Klasa QueryContinueDragEventArgs udostępnia bieżący stan przycisków myszy i modyfikujących klawiaturę, wartość określającą, czy ESC został naciśnięty, oraz wartość DragAction, którą można ustawić, aby określić, czy operacja przeciągania i upuszczania powinna być kontynuowana.
Wykonywanie przeciągania i upuszczania
Operacje przeciągania i upuszczania zawsze obejmują dwa składniki, źródło przeciągania i cel upuszczania. Aby rozpocząć operację przeciągania i upuszczania, trzeba wyznaczyć element sterujący jako źródło i obsłużyć zdarzenie MouseDown. W procedurze obsługi zdarzeń wywołaj metodę DoDragDrop, podając dane skojarzone z drop i wartość DragDropEffects.
Ustaw właściwość AllowDrop kontrolki docelowej na true
, aby umożliwić tej kontrolce akceptowanie operacji przeciągania i upuszczania. Obiekt docelowy obsługuje dwa zdarzenia, najpierw zdarzenie w odpowiedzi na przeciąganie nad kontrolką, na przykład DragOver. Drugie zdarzenie, które polega na akcji upuszczania, DragDrop.
W poniższym przykładzie pokazano przeciąganie kontrolki Label do TextBox. Po zakończeniu przeciągania TextBox
odpowiada, przypisując tekst etykiety sobie.
// 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
Aby uzyskać więcej informacji na temat efektów przeciągania, zobacz Data i AllowedEffect.
Zobacz też
.NET Desktop feedback