Omówienie zachowania myszy 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.

Ważne

Dokumentacja przewodnika dla komputerów dla platform .NET 7 i .NET 6 jest w budowie.

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 zdarzeń tych zdarzeń, można łatwo ułatwić operacje przeciągania i upuszczania.

Zdarzenia dla bieżącego miejsca docelowego upuszczania

W poniższej tabeli przedstawiono zdarzenia występujące w bieżącym obiekcie docelowym operacji przeciągania i upuszczania.

Zdarzenie myszy opis
DragEnter To zdarzenie występuje, gdy obiekt jest przeciągany do granic kontrolki. Procedura obsługi dla tego zdarzenia otrzymuje argument typu DragEventArgs.
DragOver To zdarzenie występuje, gdy obiekt jest przeciągany, gdy wskaźnik myszy znajduje się w granicach kontrolki. Procedura obsługi dla tego zdarzenia otrzymuje argument typu DragEventArgs.
DragDrop To zdarzenie występuje po zakończeniu operacji przeciągania i upuszczania. Procedura obsługi dla tego zdarzenia 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 udostępnia lokalizację wskaźnika myszy, bieżący stan przycisków myszy i modyfikatora klawiszy klawiatury, przeciągane dane i DragDropEffects wartości, które określają operacje dozwolone przez źródło zdarzenia przeciągania i docelowy efekt upuszczania 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 użytkownikowi możliwość nadania użytkownikowi wskazówek wizualnych, że odbywa się operacja przeciągania i upuszczania, na przykład zmiana wskaźnika myszy. Procedura obsługi dla tego zdarzenia otrzymuje argument typu GiveFeedbackEventArgs.
QueryContinueDrag To zdarzenie jest wywoływane podczas operacji przeciągania i upuszczania i umożliwia źródło przeciągania w celu określenia, czy operacja przeciągania i upuszczania powinna zostać anulowana. Procedura obsługi dla tego zdarzenia otrzymuje argument typu QueryContinueDragEventArgs.

Klasa QueryContinueDragEventArgs udostępnia bieżący stan przycisków myszy i klawiszy modyfikujących klawiaturę, wartość określającą, czy klawisz ESC został naciśnięty, oraz DragAction wartość, 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, należy wyznaczyć kontrolkę jako źródło i obsłużyć MouseDown zdarzenie. W procedurze obsługi zdarzeń wywołaj metodę DoDragDrop podającą dane skojarzone z upuszczaniem i wartością DragDropEffects .

Ustaw właściwość kontrolki AllowDrop docelowej, aby true 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. A drugie zdarzenie, które jest samą akcją upuszczania, DragDrop.

W poniższym przykładzie pokazano przeciąganie z kontrolki Label do elementu TextBox. Po zakończeniu TextBox przeciągania obiekt 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 też