Udostępnij za pośrednictwem


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ż