Procédure pas à pas : exécution d'opérations de glisser-déplacer dans Windows Forms

Mise à jour : novembre 2007

Pour exécuter des opérations de glisser-déplacer dans des applications Windows, vous devez gérer une série d'événements, notamment les événements DragEnter, DragLeave et DragDrop. En utilisant les informations disponibles dans les arguments d'événement de ces événements, vous pouvez faciliter beaucoup les opérations glisser-déplacer.

Faire glisser des données

Toutes les opérations glisser-déplacer commencent par un glisser. La fonctionnalité qui autorise la collecte des données au début de l'opération glisser est implémentée dans la méthode DoDragDrop.

Dans l'exemple suivant, l'événement MouseDown est utilisé pour démarrer l'opération glisser parce qu'il est le plus intuitif (la plupart des glisser-déplacer commencent par un clic du bouton de la souris). Néanmoins, souvenez-vous que n'importe quel événement peut servir à initialiser une procédure glisser-déplacer.

Remarque :

Certains contrôles disposent d'événements personnalisés spécifiques au glisser. Par exemple, les contrôles ListView et TreeView ont un événement ItemDrag.

Pour démarrer une opération glisser

  • Dans l'événement MouseDown du contrôle où l'opération glisser doit commencer, utilisez la méthode DoDragDrop pour définir les données à faire glisser et l'effet autorisé de l'opération glisser. Pour plus d'informations, consultez Data et AllowedEffect.

    L'exemple suivant illustre l'initialisation d'une opération glisser. Le contrôle où l'opération glisser commence est un contrôle Button, les données qui sont glissées constituent la chaîne qui représente la propriété Text du contrôle Button, et les effets autorisés se résument aux opérations copier ou déplacer.

    Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
       Button1.DoDragDrop(Button1.Text, DragDropEffects.Copy Or DragDropEffects.Move)
    End Sub
    
    private void button1_MouseDown(object sender, 
    System.Windows.Forms.MouseEventArgs e)
    {
       button1.DoDragDrop(button1.Text, DragDropEffects.Copy | 
          DragDropEffects.Move);
    }
    
    private void button1_MouseDown(Object sender,
    System.Windows.Forms.MouseEventArgs e)
    {
       button1.DoDragDrop(button1.get_Text(), DragDropEffects.Copy |
          DragDropEffects.Move);
    }
    
    Remarque :

    Il est possible d'utiliser n'importe quelles données comme paramètre de la méthode DoDragDrop ; dans l'exemple ci-dessus, c'est la propriété Text du contrôle Button qui est utilisée (plutôt que le codage irréversible d'une valeur ou la récupération des données d'un groupe de données) parce que la propriété est liée à l'emplacement d'origine de l'opération glisser (le contrôle Button). Souvenez-vous de ceci lorsque vous incorporez des opérations glisser-déplacer dans vos applications Windows.

Pendant qu'une opération glisser est active, vous pouvez gérer l'événement QueryContinueDrag, qui « demande l'autorisation » au système de poursuivre l'opération glisser. Lors de la gestion de cette méthode, c'est également le moment approprié pour vous d'appeler des méthodes qui auront un effet sur l'opération glisser, telle que développer un TreeNode dans un contrôle TreeView lorsque le curseur plane sur lui.

Déplacement des données

Dès que vous avez commencé à faire glisser les données d'un emplacement d'un Windows Form ou d'un contrôle Windows, vous souhaitez évidemment les déplacer ailleurs. Le curseur change lorsqu'il passe sur une zone d'un formulaire ou d'un contrôle correctement configuré pour le déplacement des données. Toute zone d'un Windows Form ou d'un contrôle peut être configurée pour accepter les données déplacées en définissant la propriété AllowDrop et en gérant les événements DragEnter et DragDrop.

Pour effectuer un déplacement

  1. Affectez la valeur true à la propriété AllowDrop.

  2. Dans l'événement DragEnter pour le contrôle où le déplacement se produira, assurez-vous que les données qui font l'objet de l'opération glisser sont d'un type acceptable (dans ce cas, Text). Le code définit ensuite l'effet produit lorsque le déplacement a lieu en lui attribuant une valeur de l'énumération DragDropEffects. Pour plus d'informations, consultez Effect.

    Private Sub TextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragEnter
       If (e.Data.GetDataPresent(DataFormats.Text)) Then
         e.Effect = DragDropEffects.Copy
       Else
         e.Effect = DragDropEffects.None
       End If
    End Sub
    
    private void textBox1_DragEnter(object sender, 
    System.Windows.Forms.DragEventArgs e)
    {
       if (e.Data.GetDataPresent(DataFormats.Text)) 
          e.Effect = DragDropEffects.Copy;
       else
          e.Effect = DragDropEffects.None;
    }
    
    private void textBox1_DragEnter(Object sender,
    System.Windows.Forms.DragEventArgs e)
    {
       if (e.get_Data().GetDataPresent(DataFormats.Text))
          e.set_Effect(DragDropEffects.Copy);
       else
          e.set_Effect(DragDropEffects.None);
    }
    
    Remarque :

    Vous pouvez définir votre propre DataFormats en spécifiant votre propre objet comme paramètre Object de la méthode SetData. Assurez-vous, lors de cette opération, que l'objet spécifié est sérialisable. Pour plus d'informations, consultez ISerializable.

  3. Dans l'événement DragDrop du contrôle où les données sont déplacées, utilisez la méthode GetData pour récupérer les données que vous faites glisser. Pour plus d'informations, consultez DtaObject.Data Property.

    Dans l'exemple ci-dessous, le contrôle qui reçoit les données déplacées est un contrôle TextBox. Le code attribue à la propriété Text du contrôle TextBox une valeur égale aux données déplacées.

    Private Sub TextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TextBox1.DragDrop
       TextBox1.Text = e.Data.GetData(DataFormats.Text).ToString
    End Sub
    
    private void textBox1_DragDrop(object sender, 
    System.Windows.Forms.DragEventArgs e)
    {
       textBox1.Text = e.Data.GetData(DataFormats.Text).ToString();
    }
    
    private void textBox1_DragDrop(Object sender,
    System.Windows.Forms.DragEventArgs e)
    {
       textBox1.set_Text
    (e.get_Data().GetData(DataFormats.Text).ToString());
    }
    
    Remarque :

    Vous pouvez, par ailleurs, manipuler la propriété KeyState afin de produire des effets spécifiques selon les touches enfoncées pendant l'opération glisser-déplacer (par exemple, la procédure standard veut que les données déplacées soient copiées lorsque la touche CTRL est enfoncée).

Voir aussi

Tâches

Comment : ajouter des données au Presse-papiers

Comment : récupérer des données du Presse-papiers

Autres ressources

Opérations glisser-déplacer et prise en charge du Presse-papiers