DragEventArgs.Effect Proprietà

Definizione

Ottiene o imposta l'effetto di rilascio di destinazione in un'operazione di trascinamento della selezione.

C#
public System.Windows.Forms.DragDropEffects Effect { get; set; }

Valore della proprietà

Uno dei valori di DragDropEffects.

Esempio

Nell'esempio seguente viene illustrata un'operazione di trascinamento della selezione tra due controlli ListBox. Nell'esempio viene chiamato il metodo DoDragDrop all'avvio dell'azione di trascinamento. L'azione di trascinamento inizia se il mouse è stato spostato più di SystemInformation.DragSize dalla posizione del mouse durante l'evento MouseDown. Il metodo IndexFromPoint viene utilizzato per determinare l'indice dell'elemento da trascinare durante l'evento MouseDown.

L'esempio illustra anche l'uso di cursori personalizzati per l'operazione di trascinamento della selezione. Nell'esempio si presuppone che nella directory dell'applicazione esistano due file di cursore, 3dwarro.cur e 3dwno.cur, rispettivamente per i cursori di trascinamento e senza rilascio personalizzati. I cursori personalizzati verranno utilizzati se è selezionata la UseCustomCursorsCheckCheckBox. I cursori personalizzati vengono impostati nel gestore eventi GiveFeedback.

Lo stato della tastiera viene valutato nel gestore eventi DragOver per il ListBoxdestro per determinare quale operazione di trascinamento si baserà sullo stato dei tasti MAIUSC, CTRL, ALT o CTRL+ALT. La posizione nel ListBox in cui si verifica l'eliminazione viene determinata anche durante l'evento DragOver. Se i dati da eliminare non sono un String, il DragEventArgs.Effect è impostato su DragDropEffects.None. Infine, lo stato del rilascio viene visualizzato nel DropLocationLabelLabel.

I dati da eliminare per il ListBox corretto sono determinati nel gestore eventi DragDrop e il valore String viene aggiunto nella posizione appropriata nel ListBox. Se l'operazione di trascinamento si sposta all'esterno dei limiti del form, l'operazione di trascinamento della selezione viene annullata nel gestore eventi QueryContinueDrag.

Questo estratto di codice illustra l'uso della classe DragEventArgs. Vedere il metodo DoDragDrop per l'esempio di codice completo.

C#
private void ListDragTarget_DragOver(object sender, 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 = CTRL + 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)
    {
        // CTRL 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.";
    }
}

Commenti

Per impostazione predefinita, l'effetto applicato determina il cursore del mouse per la destinazione di un'operazione di trascinamento della selezione. Ciò è utile per fornire commenti e suggerimenti all'utente sull'operazione che si verificherà. Ad esempio, se si preme CTRL quando si trascina un file da un'origine, specificare DragDropEffects.Copy per indicare che la destinazione tenterà di eseguire un'operazione di copia.

Per usare cursori personalizzati per un'operazione di trascinamento, vedere GiveFeedbackEventArgs.UseDefaultCursors.

Si applica a

Prodotto Versioni
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10

Vedi anche