Compartilhar via


Como habilitar operações de arrastar e soltar com o controle RichTextBox dos Windows Forms

As operações de arrastar e soltar com o controle Windows Forms RichTextBox são realizadas ao manipular os eventos DragEnter e DragDrop. Portanto, as operações de arrastar e soltar são extremamente simples com o RichTextBox controle.

Para habilitar operações de arrastar em um controle RichTextBox

  1. Defina a propriedade AllowDrop do controle RichTextBox para true.

  2. Escreva código no manipulador de eventos do DragEnter evento. Use uma instrução if para garantir que os dados que estão sendo arrastados sejam de um tipo aceitável (nesse caso, texto). A DragEventArgs.Effect propriedade pode ser definida como qualquer valor da DragDropEffects enumeração.

    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++) Coloque o código a seguir no construtor do formulário para registrar o manipulador de eventos.

    this.richTextBox1.DragEnter += new
        System.Windows.Forms.DragEventHandler
        (this.richTextBox1_DragEnter);
    
    this->richTextBox1->DragEnter += gcnew
       System::Windows::Forms::DragEventHandler
       (this, &Form1::richTextBox1_DragEnter);
    
  3. Escreva o código para lidar com o evento DragDrop. Use o DataObject.GetData método para recuperar os dados que estão sendo arrastados.

    No exemplo a seguir, o código define a Text propriedade do RichTextBox controle igual aos dados que estão sendo arrastados. Se já houver texto no RichTextBox controle, o texto arrastado será inserido no ponto de inserção.

    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++) Coloque o código a seguir no construtor do formulário para registrar o manipulador de eventos.

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

Para testar a funcionalidade de arrastar e soltar em seu aplicativo

  1. Salve e crie seu aplicativo. Enquanto ele estiver em execução, execute o WordPad.

    O WordPad é um editor de texto instalado pelo Windows que permite operações de arrastar e soltar. Ele pode ser acessado clicando no botão Iniciar , selecionando Executar, digitando WordPad na caixa de texto da caixa de diálogo Executar e clicando em OK.

  2. Quando o WordPad estiver aberto, digite uma cadeia de caracteres de texto nele. Usando o mouse, selecione o texto e arraste o texto selecionado para o RichTextBox controle em seu aplicativo do Windows.

    Observe que quando você aponta o mouse para o RichTextBox controle (e, consequentemente, aciona o DragEnter evento), o ponteiro do mouse é alterado e você pode soltar o texto selecionado no RichTextBox controle.

    Quando você libera o botão do mouse, o texto selecionado é removido (ou seja, o DragDrop evento é acionado) e é inserido dentro do RichTextBox controle.

Consulte também