Dela via


Gör så här: Aktivera dra och släpp-åtgärder med RichTextBox-kontrollen för Windows Forms

Dra och släpp-åtgärder med Windows Forms RichTextBox-kontrollen utförs genom att hantera händelserna DragEnter och DragDrop. Därför är dra och släpp-åtgärder extremt enkla med RichTextBox kontroll.

Aktivera dra-åtgärder i en RichTextBox-kontroll

  1. Ange egenskapen AllowDrop för kontrollen RichTextBox till true.

  2. Skriv kod i händelsehanteraren för den DragEnter händelsen. Använd en if-instruktion för att säkerställa att data som dras är av en acceptabel typ (i det här fallet text). Egenskapen DragEventArgs.Effect kan anges till valfritt värde för DragDropEffects uppräkning.

    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# och Visual C++) Placera följande kod i formulärets konstruktor för att registrera händelsehanteraren.

    this.richTextBox1.DragEnter += new
        System.Windows.Forms.DragEventHandler
        (this.richTextBox1_DragEnter);
    
    this->richTextBox1->DragEnter += gcnew
       System::Windows::Forms::DragEventHandler
       (this, &Form1::richTextBox1_DragEnter);
    
  3. Skriv kod för att hantera händelsen DragDrop. Använd metoden DataObject.GetData för att hämta data som håller på att dras.

    I exemplet nedan anger koden egenskapen Text för kontrollen RichTextBox lika med de data som dras. Om det redan finns text i kontrollen RichTextBox infogas den dragna texten vid insättningspunkten.

    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# och Visual C++) Placera följande kod i formulärets konstruktor för att registrera händelsehanteraren.

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

Testa dra och släpp-funktionerna i ditt program

  1. Spara och skapa ditt program. Kör WordPad medan ett annat program redan körs.

    WordPad är en textredigerare som installeras av Windows och som tillåter dra och släpp-åtgärder. Det är tillgängligt genom att klicka på knappen Starta, välja Kör, skriva WordPad i textrutan i dialogrutan Kör och klicka sedan på OK.

  2. När WordPad är öppet skriver du en textsträng i den. Använd musen, markera texten och dra sedan den markerade texten till RichTextBox-kontrollen i Windows-programmet.

    Observera att när du för musen över RichTextBox-kontrollen (och därmed utlöser händelsen DragEnter), ändras muspekaren och du kan släppa in den markerade texten i RichTextBox-kontrollen.

    När du släpper musknappen tas den markerade texten bort (dvs. händelsen DragDrop aktiveras) och infogas i kontrollen RichTextBox.

Se även