Megosztás a következőn keresztül:


Az egér húzása és ejtése funkciójának áttekintése

A Windows Forms olyan metódusokat, eseményeket és osztályokat tartalmaz, amelyek a húzási viselkedést implementálják. Ez a cikk áttekintést nyújt a Windows Forms húzással történő támogatásáról.

Húzd és vidd események

Az húzási művelet két eseménykategóriát különböztet meg: az áthúzásos művelet aktuális célpontján előforduló eseményeket, valamint az húzási művelet forrásán bekövetkező eseményeket. A húzás és ejtés műveleteinek végrehajtásához kezelnie kell ezeket az eseményeket. Az események eseményargumentumaiban elérhető információk használatával egyszerűen megkönnyítheti a húzási műveleteket.

Események az aktuális leejtési célponton

Az alábbi táblázat azokat az eseményeket mutatja be, amelyek egy húzás és eldobás művelet aktuális célobjektumán történnek.

Egér-esemény Leírás
DragEnter Ez az esemény akkor fordul elő, ha egy objektumot a vezérlő határaiba húz. Az esemény kezelője egy DragEventArgstípusú argumentumot kap.
DragOver Ez az esemény akkor fordul elő, ha egy objektumot húznak, miközben az egérmutató a vezérlőelem határán belül van. Az esemény kezelője egy DragEventArgstípusú argumentumot kap.
DragDrop Ez az esemény akkor következik be, ha egy húzás és ejtés művelet befejeződött. Az esemény kezelője egy DragEventArgstípusú argumentumot kap.
DragLeave Ez az esemény akkor fordul elő, ha egy objektumot kihúznak a vezérlő határaiból. Az esemény kezelője egy EventArgstípusú argumentumot kap.

A DragEventArgs osztály megadja az egérmutató helyét, a billentyűzet egérgombjainak és módosítóbillentyűinek aktuális állapotát, a húzandó adatokat, valamint DragDropEffects azokat az értékeket, amelyek meghatározzák a húzási esemény forrása által engedélyezett műveleteket és a művelet célcseppeffektusát.

Események a legördülő forráson

Az alábbi táblázat a húzási művelet forrásán előforduló eseményeket mutatja be.

Egér-esemény Leírás
GiveFeedback Ez az esemény húzási művelet közben következik be. Lehetővé teszi, hogy vizuális jelzést adjon a felhasználónak a húzási műveletről, például az egérmutató módosításáról. Az esemény kezelője egy GiveFeedbackEventArgstípusú argumentumot kap.
QueryContinueDrag Ez az esemény egy húzási művelet során jön létre, és lehetővé teszi a húzási forrás számára annak megállapítását, hogy a húzási műveletet meg kell-e szakítani. Az esemény kezelője egy QueryContinueDragEventArgstípusú argumentumot kap.

A QueryContinueDragEventArgs osztály megadja a billentyűzet egérgombjainak és módosítóbillentyűinek aktuális állapotát, egy értéket, amely meghatározza, hogy az ESC billentyűt lenyomták-e, valamint egy DragAction értéket, amely megadhatja, hogy a húzási művelet folytatódjon-e.

Húzás és ejtés végrehajtása

A húzási műveletek mindig két összetevőt foglalnak magukban, a húzási forrás és a cél cél. A húzási és ejtési művelet indításához jelöljön ki egy vezérlőt mint forrást, és kezelje a MouseDown eseményt. Az eseménykezelőben hívja meg azt a DoDragDrop metódust, amely az eséssel és egy DragDropEffects értékkel kapcsolatos adatokat adja meg.

Állítsa a célvezérlő AllowDrop tulajdonságát true értékre, hogy a vezérlő elfogadhasson egy húzási műveletet. A cél kétféle eseményt kezel, először egy eseményt, amikor a húzás a vezérlő fölött történik, például DragOver. És egy második esemény, amely maga a drop művelet, DragDrop.

Az alábbi példa bemutatja a húzás és ejtés műveletet egy Label vezérlőelem és egy TextBox között. Amikor a művelet befejeződött, a TextBox úgy reagál, hogy a címke szövegét hozzárendeli önmagához.

// 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

A húzási effektusokról további információt a Data és a AllowedEffectcímű témakörben talál.

Lásd még