Udostępnij za pośrednictwem


Omówienie zachowania przeciągania i upuszczania myszy

Formularze systemu Windows zawierają zestaw metod, zdarzeń i klas, które implementują zachowanie przeciągania i upuszczania. Ten artykuł zawiera omówienie obsługi przeciągania i upuszczania w formularzach Windows Forms.

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 łatwo umożliwić 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 w obszar kontrolki. Obsługa tego zdarzenia otrzymuje argument typu DragEventArgs.
DragOver To zdarzenie występuje, gdy obiekt jest przeciągany, podczas gdy wskaźnik myszy znajduje się w granicach kontrolki. Obsługa tego zdarzenia otrzymuje argument typu DragEventArgs.
DragDrop To zdarzenie ma miejsce po zakończeniu operacji przeciągania i upuszczania. Obsługa tego zdarzenia otrzymuje argument typu DragEventArgs.
DragLeave To zdarzenie występuje, gdy obiekt jest przeciągany z granic kontrolki. Obsługa tego zdarzenia otrzymuje argument typu EventArgs.

Klasa DragEventArgs udostępnia lokalizację wskaźnika myszy, bieżący stan przycisków myszy i klawiszy modyfikujących na klawiaturze, dane przeciągane oraz wartości DragDropEffects, które określają operacje dozwolone przez źródło zdarzenia przeciągania oraz efekt upuszczania docelowego dla operacji.

Zdarzenia w źródle upuszczania

W poniższej tabeli przedstawiono zdarzenia, które występują przy źródle operacji przeciągania i upuszczania.

Zdarzenie myszy Opis
GiveFeedback Zdarzenie to występuje podczas operacji przeciągania. Daje to możliwość przekazania użytkownikowi wizualnej wskazówki, że odbywa się operacja przeciągania i upuszczania, na przykład przez zmianę wskaźnika myszy. Obsługa tego zdarzenia otrzymuje argument typu GiveFeedbackEventArgs.
QueryContinueDrag To zdarzenie jest wywoływane podczas operacji przeciągania i upuszczania, umożliwiając źródłu przeciągania określenie, czy operacja powinna zostać anulowana. Obsługa 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 spadkiem i wartością 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 operację przeciągania i upuszczania z kontrolki Label do kontrolki TextBox. Po zakończeniu operacji TextBox odpowiada, przypisując do siebie tekst etykiety.

// 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 także