使用 Windows 窗体RichTextBox控件的拖放操作是通过处理DragEnter和DragDrop事件来完成的。 因此,在RichTextBox控件中执行拖放操作非常简单。
在 RichTextBox 控件中启用拖动作
将 AllowDrop 控件的属性 RichTextBox 设置为
true
。在事件的事件处理程序 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);
编写代码来处理 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);
在应用程序中测试拖放功能
保存并生成应用程序。 运行时,请运行 WordPad。
WordPad 是由 Windows 安装的一个文本编辑器,它允许拖放操作。 可通过单击“开始”按钮,选择“运行”,在“运行”对话框的文本框中键入
WordPad
,然后单击“确定”来访问它。WordPad 打开后,请在其中键入一个文本字符串。 使用鼠标选择文本,然后将所选文本拖到 Windows 应用程序中的 RichTextBox 控件上。
请注意,将鼠标指向 RichTextBox 控件(因此引发 DragEnter 事件)时,鼠标指针将更改,可以将所选文本拖放到控件中 RichTextBox 。
释放鼠标按钮时,所选文本将被放置(即 DragDrop 事件被引发),并插入 RichTextBox 控件中。