Udostępnij przez


Instrukcje: włączanie operacji przeciągania i upuszczania za pomocą kontrolki RichTextBox formularzy systemu Windows

Operacje przeciągania i upuszczania za pomocą kontrolki „Windows Forms” RichTextBox są wykonywane przez obsługę zdarzeń DragEnter i DragDrop. W związku z tym operacje przeciągania i upuszczania są niezwykle proste dzięki kontrolce RichTextBox.

Aby włączyć operacje przeciągania w kontrolce RichTextBox

  1. Ustaw właściwość AllowDrop kontrolki RichTextBox na wartość true.

  2. Napisz kod w obsłudze zdarzenia DragEnter. Użyj instrukcji if, aby upewnić się, że przeciągane dane są akceptowalnym typem (w tym przypadku tekstem). Właściwość DragEventArgs.Effect można ustawić na dowolną wartość wyliczenia 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# i Visual C++) Umieść następujący kod w konstruktorze formularza, aby zarejestrować procedurę obsługi zdarzeń.

    this.richTextBox1.DragEnter += new
        System.Windows.Forms.DragEventHandler
        (this.richTextBox1_DragEnter);
    
    this->richTextBox1->DragEnter += gcnew
       System::Windows::Forms::DragEventHandler
       (this, &Form1::richTextBox1_DragEnter);
    
  3. Napisz kod do obsługi zdarzenia DragDrop. Aby pobrać dane, które są przeciągane, użyj metody DataObject.GetData.

    W poniższym przykładzie kod ustawia właściwość Text kontrolki RichTextBox równą przeciąganym danym. Jeśli w kontrolce RichTextBox znajduje się już tekst, przeciągnięty tekst zostanie wstawiony w punkcie wstawiania.

    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# i Visual C++) Umieść następujący kod w konstruktorze formularza, aby zarejestrować procedurę obsługi zdarzeń.

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

Aby przetestować funkcję przeciągania i upuszczania w aplikacji

  1. Zapisz i skompiluj aplikację. Gdy jest uruchomiony, uruchom program WordPad.

    WordPad to edytor tekstów zainstalowany przez system Windows, który umożliwia operacje przeciągania i upuszczania. Jest on dostępny, klikając przycisk Uruchom, wybierając pozycję Uruchom, wpisując w polu tekstowym okna dialogowego Uruchom , a następnie klikając przycisk OK.

  2. Po otwarciu programu WordPad wpisz w nim ciąg tekstu. Za pomocą myszy zaznacz tekst, a następnie przeciągnij zaznaczony tekst do kontrolki RichTextBox w aplikacji systemu Windows.

    Zwróć uwagę, że po umieszczeniu kursora myszy na kontrolce RichTextBox (i w związku z tym wywołaniu zdarzenia DragEnter), wskaźnik myszy zmienia się i można przenieść zaznaczony tekst do kontrolki RichTextBox.

    Po zwolnieniu przycisku myszy zaznaczony tekst zostanie porzucony (czyli zostanie podniesione zdarzenie DragDrop) i zostanie wstawiony w kontrolce RichTextBox.

Zobacz także