Partager via


Guide pratique pour activer les opérations glisser-déplacer avec le contrôle RichTextBox Windows Forms

Les opérations glisser-déplacer avec le contrôle Windows Forms RichTextBox s’effectuent en gérant les événements DragEnter et DragDrop . De ce fait, ces opérations sont extrêmement simples avec le contrôle RichTextBox .

Pour permettre les opérations glisser dans un contrôle RichTextBox

  1. Affectez à la propriété AllowDrop du contrôle RichTextBox la valeur true.

  2. Écrivez du code dans le gestionnaire d’événements de l’événement DragEnter . Utilisez une instruction if pour vous assurer que les données glissées sont d’un type acceptable (dans ce cas, text). La valeur de la propriété DragEventArgs.Effect peut être n’importe quelle valeur de l’énumération DragDropEffects .

    Private Sub RichTextBox1_DragEnter(ByVal sender As Object, _
       ByVal e As System.Windows.Forms.DragEventArgs) _
       Handles RichTextBox1.DragEnter  
       If (e.Data.GetDataPresent(DataFormats.Text)) Then  
          e.Effect = DragDropEffects.Copy  
       Else  
          e.Effect = DragDropEffects.None  
       End If  
    End Sub  
    
    private void richTextBox1_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 richTextBox1_DragEnter(System::Object ^  sender,  
          System::Windows::Forms::DragEventArgs ^  e)  
       {  
          if (e->Data->GetDataPresent(DataFormats::Text))  
             e->Effect = DragDropEffects::Copy;  
          else  
             e->Effect = DragDropEffects::None;  
       }  
    

    (Visual C# et Visual C++) Placez le code suivant dans le constructeur du formulaire pour inscrire le gestionnaire d’événements.

    this.richTextBox1.DragEnter += new  
        System.Windows.Forms.DragEventHandler  
        (this.richTextBox1_DragEnter);  
    
    this->richTextBox1->DragEnter += gcnew  
       System::Windows::Forms::DragEventHandler  
       (this, &Form1::richTextBox1_DragEnter);  
    
  3. Écrivez du code pour gérer l’événement DragDrop . Utilisez la méthode DataObject.GetData pour récupérer les données glissées.

    Dans l’exemple ci-dessous, le code définit la propriété Text du contrôle RichTextBox comme étant égale aux données glissées. Si le contrôle RichTextBox contient déjà du texte, le texte glissé est inséré au point d’insertion.

    Private Sub RichTextBox1_DragDrop(ByVal sender As Object, _
       ByVal e As System.Windows.Forms.DragEventArgs) _
       Handles RichTextBox1.DragDrop  
       Dim i As Int16
       Dim s As String  
    
       ' Get start position to drop the text.  
       i = RichTextBox1.SelectionStart  
       s = RichTextBox1.Text.Substring(i)  
       RichTextBox1.Text = RichTextBox1.Text.Substring(0, i)  
    
       ' Drop the text on to the RichTextBox.  
       RichTextBox1.Text = RichTextBox1.Text + _  
          e.Data.GetData(DataFormats.Text).ToString()  
       RichTextBox1.Text = RichTextBox1.Text + s  
    End Sub  
    
    private void richTextBox1_DragDrop(object sender,
    System.Windows.Forms.DragEventArgs e)  
    {  
       int i;  
       String s;  
    
       // Get start position to drop the text.  
       i = richTextBox1.SelectionStart;  
       s = richTextBox1.Text.Substring(i);  
       richTextBox1.Text = richTextBox1.Text.Substring(0,i);  
    
       // Drop the text on to the RichTextBox.  
       richTextBox1.Text = richTextBox1.Text +
          e.Data.GetData(DataFormats.Text).ToString();  
       richTextBox1.Text = richTextBox1.Text + s;  
    }  
    
    private:  
       System::Void richTextBox1_DragDrop(System::Object ^  sender,  
          System::Windows::Forms::DragEventArgs ^  e)  
       {  
          int i;  
          String ^s;  
    
       // Get start position to drop the text.  
       i = richTextBox1->SelectionStart;  
       s = richTextBox1->Text->Substring(i);  
       richTextBox1->Text = richTextBox1->Text->Substring(0,i);  
    
       // Drop the text on to the RichTextBox.  
       String ^str = String::Concat(richTextBox1->Text, e->Data  
       ->GetData(DataFormats->Text)->ToString());
       richTextBox1->Text = String::Concat(str, s);  
       }  
    

    (Visual C# et Visual C++) Placez le code suivant dans le constructeur du formulaire pour inscrire le gestionnaire d’événements.

    this.richTextBox1.DragDrop += new  
        System.Windows.Forms.DragEventHandler  
        (this.richTextBox1_DragDrop);  
    
    this->richTextBox1->DragDrop += gcnew
       System::Windows::Forms::DragEventHandler  
       (this, &Form1::richTextBox1_DragDrop);  
    

Pour tester la fonctionnalité de glisser-déplacer dans votre application

  1. Enregistrez et générez votre application. Pendant son exécution, exécutez WordPad.

    WordPad est un éditeur de texte installé par Windows qui permet les opérations de glisser-déplacer. Pour y accéder, cliquez sur le bouton Démarrer , sélectionnez Exécuter, tapez WordPad dans la zone de texte de la boîte de dialogue Exécuter , puis cliquez sur OK.

  2. Une fois que WordPad est ouvert, tapez-y une chaîne de texte. À l’aide de la souris, sélectionnez le texte, puis faites-le glisser sur le contrôle RichTextBox dans votre application Windows.

    Notez que quand vous pointez la souris sur le contrôle RichTextBox (et que donc vous déclenchez l’événement DragEnter ), le pointeur de la souris se transforme et vous pouvez déposer le texte sélectionné dans le contrôle RichTextBox .

    Quand vous relâchez le bouton de la souris, le texte sélectionné est déposé (autrement dit, l’événement DragDrop est déclenché) et inséré dans le contrôle RichTextBox .

Voir aussi