Sdílet prostřednictvím


Postupy: Povolení operací přetažení pomocí ovládacího prvku Windows Forms RichTextBox

Operace přetažení pomocí ovládacího prvku Windows Forms RichTextBox se provádějí zpracováním událostí DragEnter a DragDrop. Operace přetažení jsou proto s kontrolkou RichTextBox velmi jednoduché.

Povolení operací přetažení v ovládacím prvku RichTextBox

  1. Nastavte vlastnost AllowDrop ovládacího prvku RichTextBox na true.

  2. Napište kód v obslužné rutině události DragEnter. Pomocí příkazu if se ujistěte, že přetahovaná data mají přijatelný typ (v tomto případě text). Vlastnost DragEventArgs.Effect lze nastavit na libovolnou hodnotu DragDropEffects výčtu.

    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# a Visual C++) Do konstruktoru formuláře umístěte následující kód pro registraci obslužné rutiny události.

    this.richTextBox1.DragEnter += new
        System.Windows.Forms.DragEventHandler
        (this.richTextBox1_DragEnter);
    
    this->richTextBox1->DragEnter += gcnew
       System::Windows::Forms::DragEventHandler
       (this, &Form1::richTextBox1_DragEnter);
    
  3. Napište kód pro zpracování DragDrop události. K načtení přetahovaných dat použijte metodu DataObject.GetData.

    V následujícím příkladu kód nastaví vlastnost Text ovládacího prvku RichTextBox rovna datům, která jsou přetahována. Pokud už je v ovládacím prvku RichTextBox text, přetažený text se vloží do místa vložení.

    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# a Visual C++) Do konstruktoru formuláře umístěte následující kód pro registraci obslužné rutiny události.

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

Otestování funkcí přetažení v aplikaci

  1. Uložte a sestavte aplikaci. V době, kdy běží, spusťte WordPad.

    WordPad je textový editor nainstalovaný systémem Windows, který umožňuje operace přetažení myší. Je přístupný kliknutím na tlačítko Start, výběrem Spustit, zadáním WordPad do textového pole dialogového okna Spustit a následným kliknutím na OK.

  2. Jakmile je WordPad otevřený, zadejte do něj řetězec textu. Pomocí myši vyberte text a přetáhněte vybraný text na ovládací prvek RichTextBox v aplikaci pro Windows.

    Všimněte si, že když najeďte myší na ovládací prvek RichTextBox (a v důsledku toho vyvoláte událost DragEnter), ukazatel myši se změní a vybraný text můžete umístit do ovládacího prvku RichTextBox.

    Když uvolníte tlačítko myši, vybraný text se přesune (tj. je vyvolána událost DragDrop) a vloží se do ovládacího prvku RichTextBox.

Viz také