Condividi tramite


Procedura: Abilitare operazioni di trascinamento con il controllo RichTextBox di Windows Form

Le operazioni di trascinamento della selezione del controllo RichTextBox di Windows Form vengono eseguite gestendo gli eventi DragEnter e DragDrop . Quindi, le operazioni di trascinamento della selezione risultano molto 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 il codice nel gestore eventi per l'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 uno qualsiasi dei valori 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 . Usare 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 il testo è già presente nel controllo RichTextBox , 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 trascinamento della selezione nell'applicazione

  1. Salvare e compilare l'applicazione. Durante l'esecuzione, eseguire WordPad.

    WordPad è un editor di testo installato da Windows che consente operazioni di trascinamento della selezione. È accessibile premendo Start , selezionando Eseguie digitando WordPad nella casella di testo della finestra di dialogo Esegui , quindi facendo clic su OK.

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

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

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

Vedi anche