如何:使用 Windows 窗体 RichTextBox 控件启用拖放操作

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

在 RichTextBox 控件中启用拖动操作

  1. RichTextBox 控件的 AllowDrop 属性设置为 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 安装的一个文本编辑器,它允许拖放操作。 可通过单击 “开始”按钮、选择 运行、在“运行”对话框的 文本框中键入 ,然后单击 “确定”来访问它。

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

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

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

另请参阅