Gewusst wie: Aktivieren von Drag & Drop-Operationen mithilfe des RichTextBox-Steuerelements von Windows Forms

Drag & Drop-Operationen mit dem RichTextBox-Steuerelement von Windows Forms werden durch Verarbeitung der Ereignisse DragEnter und DragDrop ausgeführt. Drag & Drop-Operationen werden daher durch das RichTextBox-Steuerelement erheblich vereinfacht.

So aktivieren Sie Drag-Operationen in einem RichTextBox-Steuerelement

  1. Legen Sie für die AllowDrop-Eigenschaft des RichTextBox-Steuerelements true fest.

  2. Schreiben Sie Code im Ereignishandler des DragEnter-Ereignisses. Stellen Sie mithilfe einer if-Anweisung sicher, dass die gezogenen Daten einen zulässigen Typ haben (in diesem Fall Text). Die DragEventArgs.Effect-Eigenschaft kann auf jeden Wert der DragDropEffects-Enumeration festgelegt werden.

    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# und Visual C++) Fügen Sie den folgenden Code im Konstruktor des Formulars ein, um den Ereignishandler zu registrieren.

    this.richTextBox1.DragEnter += new
        System.Windows.Forms.DragEventHandler
        (this.richTextBox1_DragEnter);
    
    this->richTextBox1->DragEnter += gcnew
       System::Windows::Forms::DragEventHandler
       (this, &Form1::richTextBox1_DragEnter);
    
  3. Schreiben Sie Code zur Behandlung des DragDrop-Ereignisses. Rufen Sie die gezogenen Daten mit der DataObject.GetData-Methode ab.

    Im nachstehenden Beispiel werden für die Text-Eigenschaft des RichTextBox-Steuerelements programmgesteuert die gezogenen Daten festgelegt. Wenn das RichTextBox-Steuerelement bereits Text enthält, wird der gezogene Text an der Einfügemarke eingefügt.

    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# und Visual C++) Fügen Sie den folgenden Code im Konstruktor des Formulars ein, um den Ereignishandler zu registrieren.

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

So testen Sie die Drag & Drop-Funktionalität in der Anwendung

  1. Speichern und erstellen Sie die Anwendung. Führen Sie WordPad aus, während die Anwendung ausgeführt wird.

    WordPad ist ein unter Windows installierter Text-Editor, der Drag & Drop-Operationen unterstützt. Sie greifen auf WordPad zu, indem Sie auf die Schaltfläche Start klicken, Ausführen auswählen, im Dialogfeld Ausführen im Textfeld WordPad eingeben und dann auf OK klicken.

  2. Sobald WordPad geöffnet ist, geben Sie eine Textzeichenfolge ein. Markieren Sie den Text mithilfe der Maus, und ziehen Sie ihn anschließend zum RichTextBox-Steuerelement in der Windows-Anwendung.

    Beachten Sie, dass der Mauszeiger seine Form ändert, wenn Sie mit der Maus auf das RichTextBox-Steuerelement zeigen (und damit das DragEnter-Ereignis auslösen) und Sie den markierten Text im RichTextBox-Steuerelement ablegen können.

    Wenn Sie die Maustaste loslassen, wird der markierte Text abgelegt (d. h., das DragDrop-Ereignis wird ausgelöst) und in das RichTextBox-Steuerelement eingefügt.

Siehe auch

Aufgaben

Gewusst wie: Ausführen von Drag & Drop-Operationen zwischen Anwendungen

Referenz

RichTextBox

Weitere Ressourcen

RichTextBox-Steuerelement (Windows Forms)

Steuerelemente für Windows Forms