Como: Habilitar operações de arrastar e soltar com o controle RichTextBox do Windows Forms
As operações de arrastar e soltar com o controle de RichTextBox do Windows Forms são feitas manipulando os eventos DragEnter e DragDrop. Assim, as operações de arrastar e soltar são extremamente simples com o controle RichTextBox.
Para habilitar operações de arrastar em um controle RichTextBox
Defina a propriedade AllowDrop do controle RichTextBox como
true
.Escreva código no manipulador de eventos do evento DragEnter. Use uma instrução
if
para garantir que os dados que estão sendo arrastados sejam de um tipo aceitável (neste caso, texto). A propriedade DragEventArgs.Effect pode ser definida como qualquer valor da enumeração 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++) 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);
Escreva código para manipular o evento DragDrop. Use o método DataObject.GetData para recuperar os dados que estão sendo arrastados.
No exemplo abaixo, o código define a propriedade Text do controle RichTextBox igual aos dados que estão sendo arrastados. Se já houver texto no controle RichTextBox, 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
Salve e crie seu aplicativo. Enquanto estiver em execução, execute o WordPad.
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.Quando o WordPad estiver aberto, digite uma cadeia de caracteres de texto nele. Usando o mouse, selecione o texto e, em seguida, arraste o texto selecionado para o controle de RichTextBox em seu aplicativo do Windows.
Observe que quando você aponta o mouse para o controle de RichTextBox (e, consequentemente, aumenta o evento DragEnter), o ponteiro do mouse muda e você pode soltar o texto selecionado no controle RichTextBox.
Quando você solta o botão do mouse, o texto selecionado é descartado (ou seja, o evento DragDrop é gerado) e é inserido dentro do controle RichTextBox.
Ver também
.NET Desktop feedback