Condividi tramite


Procedura: Abilitare operazioni di trascinamento e rilascio con il controllo RichTextBox di Windows Forms

Le operazioni di trascinamento e rilascio con il controllo RichTextBox di Windows Forms vengono eseguite gestendo gli eventi DragEnter e DragDrop. Pertanto, le operazioni di drag-and-drop sono estremamente semplici con il controllo RichTextBox.

Per abilitare le operazioni di trascinamento in un controllo RichTextBox

  1. Impostare la proprietà AllowDrop del controllo RichTextBox su true.

  2. Scrivere codice nel gestore eventi dell'evento DragEnter. Usare un'istruzione if per assicurarsi che i dati trascinati siano di un tipo accettabile (in questo caso testo). La proprietà DragEventArgs.Effect può essere impostata su qualsiasi valore dell'enumerazione 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# e Visual C++) Inserire il codice seguente nel costruttore del modulo per registrare il gestore eventi.

    this.richTextBox1.DragEnter += new  
        System.Windows.Forms.DragEventHandler  
        (this.richTextBox1_DragEnter);  
    
    this->richTextBox1->DragEnter += gcnew  
       System::Windows::Forms::DragEventHandler  
       (this, &Form1::richTextBox1_DragEnter);  
    
  3. Scrivere codice per gestire l'evento DragDrop. Utilizza il metodo DataObject.GetData per recuperare i dati trascinati.

    Nell'esempio seguente il codice imposta la proprietà Text del controllo RichTextBox uguale ai dati trascinati. Se nel controllo RichTextBox è già presente testo, il testo trascinato viene inserito nel punto di inserimento.

    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# e Visual C++) Inserire il codice seguente nel costruttore del modulo per registrare il gestore eventi.

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

Per testare la funzionalità di trascina e rilascia nell'applicazione

  1. Salvare e compilare l'applicazione. Mentre un programma è in esecuzione, eseguire WordPad.

    WordPad è un editor di testo installato da Windows che consente operazioni di trascinamento. È accessibile facendo clic sul pulsante Avvia , selezionando Esegui, digitando WordPad nella casella di testo della finestra di dialogo Esegui , e quindi facendo clic su OK.

  2. Una volta aperto WordPad, digitare una stringa di testo. Usando il mouse, selezionare il testo e quindi trascinare il testo selezionato sul controllo RichTextBox nell'applicazione Windows.

    Notare che quando si passa il mouse sul controllo RichTextBox (e, di conseguenza, si genera l'evento DragEnter), il puntatore del mouse cambia ed è possibile spostare il testo selezionato nel controllo RichTextBox.

    Quando si rilascia il pulsante del mouse, il testo selezionato viene eliminato (ovvero viene generato l'evento DragDrop) e viene inserito all'interno del controllo RichTextBox.

Vedere anche