Leggere in inglese

Condividi tramite


DragEventArgs Classe

Definizione

Fornisce dati per l'evento DragDrop, DragEntero DragOver.

C#
[System.Runtime.InteropServices.ComVisible(true)]
public class DragEventArgs : EventArgs
C#
public class DragEventArgs : EventArgs
Ereditarietà
DragEventArgs
Derivato
Attributi

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.";
    }
}

Nell'esempio seguente viene illustrato come DragEventArgs vengono passati tra l'origine e la destinazione di un'operazione di trascinamento della selezione. In questo esempio, un controllo ListBox è l'origine dei dati e il controllo RichTextBox è la destinazione. Nell'esempio si presuppone che il controllo ListBox sia stato popolato con un elenco di nomi file validi. Quando l'utente trascina uno dei nomi file visualizzati dal controllo ListBox nel controllo RichTextBox, viene aperto il file a cui si fa riferimento nel nome file.

L'operazione viene avviata nell'evento MouseDown del controllo ListBox. Nel gestore eventi DragEnter, nell'esempio viene utilizzato il metodo GetDataPresent per verificare che i dati siano in un formato che il controllo RichTextBox possa visualizzare e quindi imposta la proprietà DragDropEffects per specificare che i dati devono essere copiati dal controllo del codice sorgente al controllo di destinazione. Infine, il gestore eventi DragDrop del controllo RichTextBox usa il metodo GetData per recuperare il nome file da aprire.

C#
private void Form1_Load(object sender, EventArgs e) 
{
   // Sets the AllowDrop property so that data can be dragged onto the control.
   richTextBox1.AllowDrop = true;

   // Add code here to populate the ListBox1 with paths to text files.
}

private void listBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
   // Determines which item was selected.
   ListBox lb =( (ListBox)sender);
   Point pt = new Point(e.X,e.Y);
   int index = lb.IndexFromPoint(pt);

   // Starts a drag-and-drop operation with that item.
   if(index>=0) 
   {
      lb.DoDragDrop(lb.Items[index].ToString(), DragDropEffects.Link);
   }
}

private void richTextBox1_DragEnter(object sender, DragEventArgs e) 
{
   // If the data is text, copy the data to the RichTextBox control.
   if(e.Data.GetDataPresent("Text"))
      e.Effect = DragDropEffects.Copy;
}

private void richTextBox1_DragDrop(object sender, DragEventArgs e) 
{
   // Loads the file into the control. 
   richTextBox1.LoadFile((String)e.Data.GetData("Text"), System.Windows.Forms.RichTextBoxStreamType.RichText);
}

Commenti

L'evento DragDrop si verifica quando l'utente completa un'operazione di trascinamento della selezione trascinando un oggetto sul controllo e rilasciandolo sul controllo rilasciando il pulsante del mouse. L'evento DragEnter si verifica quando l'utente sposta il puntatore del mouse sul controllo durante il trascinamento di un oggetto con il mouse. L'evento DragOver si verifica quando l'utente sposta il puntatore del mouse sul controllo durante il trascinamento di un oggetto con il mouse.

Un oggetto DragEventArgs specifica i dati associati a questo evento; lo stato corrente dei tasti MAIUSC, CTRL e ALT; la posizione del puntatore del mouse; e gli effetti di trascinamento della selezione consentiti dall'origine e dalla destinazione dell'evento di trascinamento.

Per informazioni sul modello di evento, vedere Gestione e generazione di eventi.

Costruttori

Proprietà

AllowedEffect

Ottiene le operazioni di trascinamento della selezione consentite dall'originatore (o dall'origine) dell'evento di trascinamento.

Data

Ottiene il IDataObject che contiene i dati associati a questo evento.

DropImageType

Ottiene o imposta il tipo di immagine della descrizione di rilascio.

Effect

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

KeyState

Ottiene lo stato corrente dei tasti MAIUSC, CTRL e ALT, nonché lo stato dei pulsanti del mouse.

Message

Ottiene o imposta il testo della descrizione di rilascio, ad esempio "Sposta in %1".

MessageReplacementToken

Ottiene o imposta il testo della descrizione di rilascio, ad esempio "Documenti", quando %1 viene specificato in Message.

X

Ottiene la coordinata x del puntatore del mouse, nelle coordinate dello schermo.

Y

Ottiene la coordinata y del puntatore del mouse, nelle coordinate dello schermo.

Metodi

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

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