DragEventHandler Делегат
Определение
public delegate void DragEventHandler(System::Object ^ sender, DragEventArgs ^ e);
public delegate void DragEventHandler(object sender, DragEventArgs e);
type DragEventHandler = delegate of obj * DragEventArgs -> unit
Public Delegate Sub DragEventHandler(sender As Object, e As DragEventArgs)
Параметры
- sender
- Object
Источник события.The source of the event.
Объект DragEventArgs, содержащий данные события.A DragEventArgs that contains the event data.
- Наследование
Примеры
В следующем примере показана операция перетаскивания между двумя ListBox элементами управления.The following example demonstrates a drag-and-drop operation between two ListBox controls. В примере вызывается DoDragDrop метод, когда начинается действие перетаскивания.The example calls the DoDragDrop method when the drag action starts. Действие перетаскивания начинается, если мышь переместилась больше SystemInformation.DragSize , чем от положения мыши во время MouseDown события.The drag action starts if the mouse has moved more than SystemInformation.DragSize from the mouse location during the MouseDown event. IndexFromPointМетод используется для определения индекса элемента, перетаскиваемого во время MouseDown
события.The IndexFromPoint method is used to determine the index of the item to drag during the MouseDown
event.
В примере также демонстрируется использование пользовательских курсоров для операции перетаскивания.The example also demonstrates using custom cursors for the drag-and-drop operation. В этом примере предполагается, что два файла курсора 3dwarro.cur
и 3dwno.cur
существуют в каталоге приложения для настраиваемых курсоров перетаскивания и без перетаскивания соответственно.The example assumes that two cursor files, 3dwarro.cur
and 3dwno.cur
, exist in the application directory, for the custom drag and no-drop cursors, respectively. Если флажок установлен, будут использоваться пользовательские курсоры UseCustomCursorsCheck
CheckBox .The custom cursors will be used if the UseCustomCursorsCheck
CheckBox is checked. Пользовательские курсоры задаются в GiveFeedback обработчике событий.The custom cursors are set in the GiveFeedback event handler.
Состояние клавиатуры вычисляется в DragOver обработчике событий справа ListBox
, чтобы определить, какая операция перетаскивания будет основываться на состоянии клавиш Shift, CTRL, Alt или CTRL + ALT.The keyboard state is evaluated in the DragOver event handler for the right ListBox
, to determine what the drag operation will be based upon state of the SHIFT, CTRL, ALT, or CTRL+ALT keys. Место в месте, ListBox
куда будет происходить удаление, также определяется во время DragOver
события.The location in the ListBox
where the drop would occur is also determined during the DragOver
event. Если данные для удаления не являются String
, то устанавливается DragEventArgs.Effect в значение DragDropEffects.None .If the data to drop is not a String
, then the DragEventArgs.Effect is set to DragDropEffects.None. Наконец, состояние удаления отображается в DropLocationLabel
Label .Finally, the status of the drop is displayed in the DropLocationLabel
Label.
Данные, которые нужно удалить справа, ListBox
определяются в DragDrop обработчике событий, а String
значение добавляется в соответствующее место в ListBox
.The data to drop for the right ListBox
is determined in the DragDrop event handler and the String
value is added at the appropriate place in the ListBox
. Если операция перетаскивания выходит за границы формы, операция перетаскивания отменяется в QueryContinueDrag обработчике событий.If the drag operation moves outside the bounds of the form, then the drag-and-drop operation is canceled in the QueryContinueDrag event handler.
Этот фрагмент кода демонстрирует использование DragEventHandler делегата с DragOver событием.This code excerpt demonstrates using the DragEventHandler delegate with the DragOver event. DoDragDropПолный пример кода см. в описании метода.See the DoDragDrop method for the complete code example.
void ListDragTarget_DragOver( Object^ /*sender*/, System::Windows::Forms::DragEventArgs^ e )
{
// Determine whether string data exists in the drop data. If not, then
// the drop effect reflects that the drop cannot occur.
if ( !e->Data->GetDataPresent( System::String::typeid ) )
{
e->Effect = DragDropEffects::None;
DropLocationLabel->Text = "None - no string data.";
return;
}
// Set the effect based upon the KeyState.
if ( (e->KeyState & (8 + 32)) == (8 + 32) && ((e->AllowedEffect & DragDropEffects::Link) == DragDropEffects::Link) )
{
// KeyState 8 + 32 = CTL + ALT
// Link drag-and-drop effect.
e->Effect = DragDropEffects::Link;
}
else
if ( (e->KeyState & 32) == 32 && ((e->AllowedEffect & DragDropEffects::Link) == DragDropEffects::Link) )
{
// ALT KeyState for link.
e->Effect = DragDropEffects::Link;
}
else
if ( (e->KeyState & 4) == 4 && ((e->AllowedEffect & DragDropEffects::Move) == DragDropEffects::Move) )
{
// SHIFT KeyState for move.
e->Effect = DragDropEffects::Move;
}
else
if ( (e->KeyState & 8) == 8 && ((e->AllowedEffect & DragDropEffects::Copy) == DragDropEffects::Copy) )
{
// CTL KeyState for copy.
e->Effect = DragDropEffects::Copy;
}
else
if ( (e->AllowedEffect & DragDropEffects::Move) == DragDropEffects::Move )
{
// By default, the drop action should be move, if allowed.
e->Effect = DragDropEffects::Move;
}
else
e->Effect = DragDropEffects::None;
// Get the index of the item the mouse is below.
// The mouse locations are relative to the screen, so they must be
// converted to client coordinates.
indexOfItemUnderMouseToDrop = ListDragTarget->IndexFromPoint( ListDragTarget->PointToClient( Point(e->X,e->Y) ) );
// Updates the label text.
if ( indexOfItemUnderMouseToDrop != ListBox::NoMatches )
{
DropLocationLabel->Text = String::Concat( "Drops before item # ", (indexOfItemUnderMouseToDrop + 1) );
}
else
DropLocationLabel->Text = "Drops at the end.";
}
private void ListDragTarget_DragOver(object sender, System.Windows.Forms.DragEventArgs e)
{
// Determine whether string data exists in the drop data. If not, then
// the drop effect reflects that the drop cannot occur.
if (!e.Data.GetDataPresent(typeof(System.String))) {
e.Effect = DragDropEffects.None;
DropLocationLabel.Text = "None - no string data.";
return;
}
// Set the effect based upon the KeyState.
if ((e.KeyState & (8+32)) == (8+32) &&
(e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) {
// KeyState 8 + 32 = CTL + ALT
// Link drag-and-drop effect.
e.Effect = DragDropEffects.Link;
} else if ((e.KeyState & 32) == 32 &&
(e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link) {
// ALT KeyState for link.
e.Effect = DragDropEffects.Link;
} else if ((e.KeyState & 4) == 4 &&
(e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) {
// SHIFT KeyState for move.
e.Effect = DragDropEffects.Move;
} else if ((e.KeyState & 8) == 8 &&
(e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy) {
// CTL KeyState for copy.
e.Effect = DragDropEffects.Copy;
} else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move) {
// By default, the drop action should be move, if allowed.
e.Effect = DragDropEffects.Move;
} else
{
e.Effect = DragDropEffects.None;
}
// Get the index of the item the mouse is below.
// The mouse locations are relative to the screen, so they must be
// converted to client coordinates.
indexOfItemUnderMouseToDrop =
ListDragTarget.IndexFromPoint(ListDragTarget.PointToClient(new Point(e.X, e.Y)));
// Updates the label text.
if (indexOfItemUnderMouseToDrop != ListBox.NoMatches){
DropLocationLabel.Text = "Drops before item #" + (indexOfItemUnderMouseToDrop + 1);
} else
{
DropLocationLabel.Text = "Drops at the end.";
}
}
Private Sub ListDragTarget_DragOver(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListDragTarget.DragOver
' Determine whether string data exists in the drop data. If not, then
' the drop effect reflects that the drop cannot occur.
If Not (e.Data.GetDataPresent(GetType(System.String))) Then
e.Effect = DragDropEffects.None
DropLocationLabel.Text = "None - no string data."
Return
End If
' Set the effect based upon the KeyState.
If ((e.KeyState And (8 + 32)) = (8 + 32) And _
(e.AllowedEffect And DragDropEffects.Link) = DragDropEffects.Link) Then
' KeyState 8 + 32 = CTL + ALT
' Link drag-and-drop effect.
e.Effect = DragDropEffects.Link
ElseIf ((e.KeyState And 32) = 32 And _
(e.AllowedEffect And DragDropEffects.Link) = DragDropEffects.Link) Then
' ALT KeyState for link.
e.Effect = DragDropEffects.Link
ElseIf ((e.KeyState And 4) = 4 And _
(e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move) Then
' SHIFT KeyState for move.
e.Effect = DragDropEffects.Move
ElseIf ((e.KeyState And 8) = 8 And _
(e.AllowedEffect And DragDropEffects.Copy) = DragDropEffects.Copy) Then
' CTL KeyState for copy.
e.Effect = DragDropEffects.Copy
ElseIf ((e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move) Then
' By default, the drop action should be move, if allowed.
e.Effect = DragDropEffects.Move
Else
e.Effect = DragDropEffects.None
End If
' Gets the index of the item the mouse is below.
' The mouse locations are relative to the screen, so they must be
' converted to client coordinates.
indexOfItemUnderMouseToDrop = _
ListDragTarget.IndexFromPoint(ListDragTarget.PointToClient(New Point(e.X, e.Y)))
' Updates the label text.
If (indexOfItemUnderMouseToDrop <> ListBox.NoMatches) Then
DropLocationLabel.Text = "Drops before item #" & (indexOfItemUnderMouseToDrop + 1)
Else
DropLocationLabel.Text = "Drops at the end."
End If
End Sub
Комментарии
При создании делегата DragEventHandler необходимо указать метод, обрабатывающий событие.When you create a DragEventHandler delegate, you identify the method that will handle the event. Чтобы связать событие с обработчиком событий, нужно добавить в событие экземпляр делегата.To associate the event with your event handler, add an instance of the delegate to the event. Обработчик событий вызывается всякий раз, когда происходит событие, если делегат не удален.The event handler is called whenever the event occurs, unless you remove the delegate. Дополнительные сведения об обработке событий с помощью делегатов см. в разделе обработка и вызов событий.For more information about handling events with delegates, see Handling and Raising Events.
Методы расширения
GetMethodInfo(Delegate) |
Получает объект, представляющий метод, представленный указанным делегатом.Gets an object that represents the method represented by the specified delegate. |