Control.DragOver Control.DragOver Control.DragOver Control.DragOver Event

정의

개체를 컨트롤의 범위 위로 끌 때 발생합니다.Occurs when an object is dragged over the control's bounds.

public:
 event System::Windows::Forms::DragEventHandler ^ DragOver;
public event System.Windows.Forms.DragEventHandler DragOver;
member this.DragOver : System.Windows.Forms.DragEventHandler 
Public Custom Event DragOver As DragEventHandler 

예제

다음 코드 예제에서는 두는 끌어서 놓기 작업을 보여 줍니다. ListBox 컨트롤입니다.The following code 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.cur3dwno.cur, 사용자 지정 끌기에 대 한 응용 프로그램 디렉터리에 존재 놓기-커서, 각각.The example requires 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 UseCustomCursorsCheckCheckBox 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 on 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 로 설정 된 None 에서 DragDropEffects합니다.If the data to drop is not a String, then the DragEventArgs.Effect is set to None in DragDropEffects. 드롭다운의 상태에 표시 됩니다는 마지막으로, 합니다 DropLocationLabel Label합니다.Finally, the status of the drop is displayed in the DropLocationLabelLabel.

데이터를 오른쪽에 대 한 drop 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.

이 코드 예제에서는 사용 하 여는 DragOver 이벤트입니다.This code excerpt demonstrates using 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

설명

DragOver 이벤트는 끌어서 놓기 작업 중 컨트롤의 범위 내에서 마우스 커서를 이동 하면 발생 합니다.The DragOver event is raised when the mouse cursor moves within the bounds of the control during a drag-and-drop operation.

다음에서는 끌어서 놓기 작업이 발생하는 방식 및 시기에 대해 설명합니다.The following describes how and when events related to drag-and-drop operations are raised.

DoDragDrop 메서드는 현재 커서 위치에서 컨트롤을 확인 합니다.The DoDragDrop method determines the control under the current cursor location. 컨트롤의 유효한 놓기 대상 인지 확인 한 다음 확인 합니다.It then checks to see if the control is a valid drop target.

컨트롤이 유효한 놓기 대상에 있으면는 GiveFeedback 지정 끌어서 놓기 효과 사용 하 여 이벤트가 발생 합니다.If the control is a valid drop target, the GiveFeedback event is raised with the drag-and-drop effect specified. 끌어서 놓기 작업 결과 목록에 대한 자세한 내용은 DragDropEffects 열거형을 참조하십시오.For a list of drag-and-drop effects, see the DragDropEffects enumeration.

마우스 커서 위치, 키보드 상태 및 마우스 단추 상태의 변경 내용을 추적합니다.Changes in the mouse cursor position, keyboard state, and mouse button state are tracked.

  • 사용자가 창의 외부로 이동하면 DragLeave 이벤트가 발생합니다.If the user moves out of a window, the DragLeave event is raised.

  • 마우스를 다른 컨트롤로 가져가면 해당 컨트롤에 대한 DragEnter가 발생합니다.If the mouse enters another control, the DragEnter for that control is raised.

  • 마우스를 동일한 컨트롤 내에서 이동하면 DragOver 이벤트가 발생합니다.If the mouse moves but stays within the same control, the DragOver event is raised.

키보드 또는 마우스 단추 상태가 변경 될 경우는 QueryContinueDrag 의 값을 기준으로 작업을 취소 하려면 또는 이벤트가 발생 하 고 데이터를 놓을지 끌기를 계속할지 여부를 결정 합니다 Action 이벤트의 속성 QueryContinueDragEventArgs합니다.If there is a change in the keyboard or mouse button state, the QueryContinueDrag event is raised and determines whether to continue the drag, to drop the data, or to cancel the operation based on the value of the Action property of the event's QueryContinueDragEventArgs.

  • 경우 값 DragAction 값이 ContinueDragOver 이벤트는 작업을 계속 하려면 및 GiveFeedback 적절 한 시각적 피드백이 설정 될 수 있도록 새로운 효과 사용 하 여 이벤트가 발생 합니다.If the value of DragAction value is Continue, the DragOver event is raised to continue the operation and the GiveFeedback event is raised with the new effect so appropriate visual feedback can be set. 유효한 끌어서 놓기 작업 결과 목록에 대한 자세한 내용은 DragDropEffects 열거형을 참조하십시오.For a list of valid drop effects, see the DragDropEffects enumeration.

    참고

    합니다 DragOverGiveFeedback 이벤트는 쌍을 이루고 있어서 마우스가 놓기 대상을 사용자 마우스의 위치에 대 한 최신 피드백이 제공 됩니다.The DragOver and GiveFeedback events are paired so that as the mouse moves across the drop target, the user is given the most up-to-date feedback on the mouse's position.

  • 경우 값 DragActionDrop놓기 결과 값이 소스로 반환은, 원본 응용 프로그램은 원본 데이터에 대해 적절 한 작업을 수행할 수 있도록 예의 경우 데이터 잘라내기 작업이 이동 합니다.If the value of DragAction is Drop, the drop effect value is returned to the source, so the source application can perform the appropriate operation on the source data; for example, cut the data if the operation was a move.

  • 경우 값 DragAction 됩니다 CancelDragLeave 이벤트가 발생 합니다.If the value of DragAction is Cancel, the DragLeave event is raised.

    참고

    합니다 XY 의 속성을 DragEventArgs 클라이언트 좌표가 아닌 화면 좌표에 합니다.The X and Y properties of the DragEventArgs are in screen coordinates, not client coordinates. C# 코드의 다음 줄을 클라이언트에 속성을 변환 Point:The following line of C# code converts the properties to a client Point:

    Point clientPoint = targetControl.PointToClient(new Point(de.X, de.Y));Point clientPoint = targetControl.PointToClient(new Point(de.X, de.Y));

이벤트 처리에 대한 자세한 내용은 이벤트 처리 및 발생 을 참조하십시오.For more information about handling events, see Handling and Raising Events.

적용 대상

추가 정보