Freigeben über


Vorgehensweise: Aktivieren von Drag-and-Drop-Vorgängen mit dem Windows Forms RichTextBox-Steuerelement

Drag-and-Drop-Vorgänge mit dem Windows Forms-Steuerelement RichTextBox werden durch das Behandeln der Ereignisse DragEnter und DragDrop durchgeführt. Daher sind Drag-and-Drop-Vorgänge mit dem RichTextBox Steuerelement extrem einfach.

So aktivieren Sie Drag-Vorgänge in einem RichTextBox-Steuerelement

  1. Legen Sie die AllowDrop-Eigenschaft des RichTextBox-Steuerelements auf true fest.

  2. Schreiben Sie Code im Ereignishandler des DragEnter Ereignisses. Verwenden Sie eine if Anweisung, um sicherzustellen, dass die gezogenen Daten einen akzeptablen Typ aufweisen (in diesem Fall Text). Die DragEventArgs.Effect Eigenschaft kann auf einen beliebigen 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++) Platzieren Sie den folgenden Code im Konstruktor des Formulars, 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. Verwenden Sie die DataObject.GetData Methode, um die gezogenen Daten abzurufen.

    Im folgenden Beispiel setzt der Code die Text Eigenschaft des RichTextBox Steuerelements gleich den Daten, die verschoben werden. Wenn bereits Text im RichTextBox Steuerelement vorhanden ist, 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++) Platzieren Sie den folgenden Code im Konstruktor des Formulars, 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-and-Drop-Funktionalität in Ihrer Anwendung

  1. Speichern und erstellen Sie Ihre Anwendung. Führen Sie WordPad aus, während es läuft.

    WordPad ist ein von Windows installierter Text-Editor, der Drag-and-Drop-Vorgänge zulässt. Auf sie kann zugegriffen werden, indem Sie auf die Schaltfläche "Start" klicken, "Ausführen" auswählen, das Textfeld des Dialogfelds "WordPad" eingeben und dann auf "OK" klicken.

  2. Sobald WordPad geöffnet ist, geben Sie eine Textzeichenfolge darin ein. Markieren Sie mit der Maus den Text, und ziehen Sie dann den markierten Text auf das RichTextBox Steuerelement in Ihrer Windows-Anwendung.

    Beachten Sie, dass sich der Mauszeiger ändert, wenn Sie mit der Maus auf das RichTextBox Steuerelement zeigen (und daher das DragEnter Ereignis auslösen), und Sie können den markierten Text in das RichTextBox Steuerelement ablegen.

    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