DragEventArgs.Effect Propiedad

Definición

Obtiene o establece el efecto de colocación en el destino de una operación de arrastrar y colocar.Gets or sets the target drop effect in a drag-and-drop operation.

public:
 property System::Windows::Forms::DragDropEffects Effect { System::Windows::Forms::DragDropEffects get(); void set(System::Windows::Forms::DragDropEffects value); };
public System.Windows.Forms.DragDropEffects Effect { get; set; }
member this.Effect : System.Windows.Forms.DragDropEffects with get, set
Public Property Effect As DragDropEffects

Valor de propiedad

Uno de los valores de DragDropEffects .One of the DragDropEffects values.

Ejemplos

En el ejemplo siguiente se muestra una operación de arrastrar y colocar entre dos controles ListBox.The following example demonstrates a drag-and-drop operation between two ListBox controls. En el ejemplo se llama al método DoDragDrop cuando se inicia la acción de arrastrar.The example calls the DoDragDrop method when the drag action starts. La acción de arrastrar comienza si el mouse ha pasado más de SystemInformation.DragSize desde la ubicación del mouse durante el evento de MouseDown.The drag action starts if the mouse has moved more than SystemInformation.DragSize from the mouse location during the MouseDown event. El método IndexFromPoint se utiliza para determinar el índice del elemento que se va a arrastrar durante el evento MouseDown.The IndexFromPoint method is used to determine the index of the item to drag during the MouseDown event.

En el ejemplo también se muestra el uso de cursores personalizados para la operación de arrastrar y colocar.The example also demonstrates using custom cursors for the drag-and-drop operation. En el ejemplo se da por supuesto que dos archivos de cursor, 3dwarro.cur y 3dwno.cur, existen en el directorio de la aplicación para los cursores de arrastrar y no colocar personalizados, respectivamente.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. Los cursores personalizados se utilizarán si se comprueba el CheckBox de UseCustomCursorsCheck.The custom cursors will be used if the UseCustomCursorsCheckCheckBox is checked. Los cursores personalizados se establecen en el controlador de eventos GiveFeedback.The custom cursors are set in the GiveFeedback event handler.

El estado del teclado se evalúa en el controlador de eventos DragOver para el ListBoxderecho, para determinar qué operación de arrastre se basará en el estado de las teclas Mayús, CTRL, ALT o 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. La ubicación en el ListBox donde se produciría la colocación también se determina durante el evento DragOver.The location in the ListBox where the drop would occur is also determined during the DragOver event. Si los datos que se van a quitar no son un String, el DragEventArgs.Effect se establece en DragDropEffects.None.If the data to drop is not a String, then the DragEventArgs.Effect is set to DragDropEffects.None. Por último, el estado de la eliminación se muestra en el LabelDropLocationLabel.Finally, the status of the drop is displayed in the DropLocationLabelLabel.

Los datos que se van a quitar para la ListBox derecha se determinan en el controlador de eventos DragDrop y se agrega el valor String en el lugar adecuado del 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. Si la operación de arrastrar se mueve fuera de los límites del formulario, la operación de arrastrar y colocar se cancela en el controlador de eventos 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.

En este fragmento de código se muestra el uso de la clase DragEventArgs.This code excerpt demonstrates using the DragEventArgs class. Vea el método DoDragDrop para obtener el ejemplo de código completo.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

Comentarios

De forma predeterminada, el efecto aplicado determina el cursor del mouse para el destino de una operación de arrastrar y colocar.By default, the effect applied determines the mouse cursor for the target of a drag-and-drop operation. Esto resulta útil para proporcionar comentarios al usuario sobre la operación que se va a producir.This is useful to provide feedback to the user on the operation that will occur. Por ejemplo, si presiona la tecla CTRL mientras arrastra un archivo desde un origen, especifique DragDropEffects.Copy para indicar que el destino intentará realizar una operación de copia.For example, if you press the CTRL key when you drag a file from a source, specify DragDropEffects.Copy to indicate the target will try to perform a copy operation.

Para usar cursores personalizados para una operación de arrastre, vea GiveFeedbackEventArgs.UseDefaultCursors.To use custom cursors for a drag operation, see GiveFeedbackEventArgs.UseDefaultCursors.

Se aplica a

Consulte también: