如何:使用 Windows 窗体 RichTextBox 控件启用拖放操作
使用 Windows 窗体 RichTextBox 控件执行拖放操作是通过处理 DragEnter 和 DragDrop 事件来完成的。 因此,拖放操作在 RichTextBox 控件中非常简单。
在 RichTextBox 控件中启用拖动操作
将 RichTextBox 控件的 AllowDrop 属性设置为
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 打开后,请在其中键入一个文本字符串。 使用鼠标选择文本,然后将所选文本拖到 Windows 应用程序中的 RichTextBox 控件。
请注意,将鼠标指向 RichTextBox 控件(因此引发 DragEnter 事件)时,鼠标指针将更改,可以将所选文本拖放到 RichTextBox 控件中。
释放鼠标按钮时,将删除所选文本(即引发 DragDrop 事件),并插入到 RichTextBox 控件中。
另请参阅
- RichTextBox
- 如何在应用程序之间执行拖放操作
- RichTextBox 控件
- 在 Windows 窗体 上使用的
控件