Como habilitar operações do tipo "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 feitas manipulando os DragEnter eventos e DragDrop . Assim, as operações de arrastar e soltar são extremamente simples com o RichTextBox controle.
Habilitar operações de arrastar em um controle RichTextBox
Defina a AllowDropRichTextBox propriedade do controle como
true
.Escreva código no manipulador de eventos do DragEnter evento. Use uma instrução
if
para garantir que os dados que são arrastados pertencem a um tipo aceitável (neste 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);
Escreva código para manipular o DragDrop evento. Use o DataObject.GetData método para recuperar os dados que estão sendo arrastados.
No exemplo abaixo, o código define a Text propriedade do RichTextBox controle igual aos dados que estão sendo arrastados. Se já houver texto no controle, o texto arrastado será inserido no RichTextBox 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);
Testar a funcionalidade do tipo "arrastar e soltar" no seu aplicativo
Salve e compile o aplicativo. Enquanto estiver em execução, execute o WordPad.
O WordPad é um editor de texto instalado pelo Windows que permite realizar operações do tipo "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.Após abrir o WordPad, digite uma cadeia 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 controle (e, consequentemente, aumentar o evento), o RichTextBoxDragEnter ponteiro do mouse muda e você pode soltar o texto selecionado no RichTextBox controle.
Quando você solta o botão do mouse, o texto selecionado é descartado (ou seja, o DragDrop evento é gerado) e é inserido dentro do RichTextBox controle.
Confira também
.NET Desktop feedback