如何:在Windows窗体的RichTextBox控件中启用拖放操作

使用 Windows 窗体RichTextBox控件的拖放操作是通过处理DragEnterDragDrop事件来完成的。 因此,在RichTextBox控件中执行拖放操作非常简单。

在 RichTextBox 控件中启用拖动作

  1. AllowDrop 控件的属性 RichTextBox 设置为 true

  2. 在事件的事件处理程序 DragEnter 中编写代码。 if使用语句确保所拖动的数据是可接受的类型(在本例中为文本)。 该 DragEventArgs.Effect 属性可以设置为 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# 和 Visual C++)将以下代码置于表单的构造函数中以注册事件处理程序。

    this.richTextBox1.DragEnter += new
        System.Windows.Forms.DragEventHandler
        (this.richTextBox1_DragEnter);
    
    this->richTextBox1->DragEnter += gcnew
       System::Windows::Forms::DragEventHandler
       (this, &Form1::richTextBox1_DragEnter);
    
  3. 编写代码来处理 DragDrop 事件。 使用DataObject.GetData方法检索正在拖动的数据。

    在下面的示例中,代码将控件的属性RichTextBox设置为Text等于所拖动的数据。 如果控件中 RichTextBox 已有文本,则拖动的文本将插入插入点。

    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# 和 Visual C++)将以下代码置于表单的构造函数中以注册事件处理程序。

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

在应用程序中测试拖放功能

  1. 保存并生成应用程序。 运行时,请运行 WordPad。

    WordPad 是由 Windows 安装的一个文本编辑器,它允许拖放操作。 可通过单击“开始”按钮,选择“运行”,在“运行”对话框的文本框中键入WordPad,然后单击“确定”来访问它。

  2. WordPad 打开后,请在其中键入一个文本字符串。 使用鼠标选择文本,然后将所选文本拖到 Windows 应用程序中的 RichTextBox 控件上。

    请注意,将鼠标指向 RichTextBox 控件(因此引发 DragEnter 事件)时,鼠标指针将更改,可以将所选文本拖放到控件中 RichTextBox

    释放鼠标按钮时,所选文本将被放置(即 DragDrop 事件被引发),并插入 RichTextBox 控件中。

另请参阅