如何:在 Windows 窗体 RichTextBox 控件中启用拖放操作
更新:2007 年 11 月
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(Object sender, System.Windows.Forms.DragEventArgs e) { if (e.get_Data().GetDataPresent(DataFormats.Text)) e.set_Effect(DragDropEffects.Copy); else e.set_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 J# 和 Visual C++)在窗体的构造函数中放置以下代码,以注册事件处理程序。
this.richTextBox1.DragEnter += new System.Windows.Forms.DragEventHandler (this.richTextBox1_DragEnter);
this.richTextBox1.add_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 void richTextBox1_DragDrop(Object sender, System.Windows.Forms.DragEventArgs e) { int i; String s; // Get start position to drop the text. i = richTextBox1.get_SelectionStart(); s = richTextBox1.get_Text().Substring(i); richTextBox1.set_Text(richTextBox1.get_Text().Substring(0, i)); // Drop the text on to the RichTextBox. richTextBox1.set_Text(richTextBox1.get_Text() + e.get_Data().GetData(DataFormats.Text).ToString()); richTextBox1.set_Text(richTextBox1.get_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 J# 和 Visual C++)在窗体的构造函数中放置以下代码,以注册事件处理程序。
this.richTextBox1.DragDrop += new System.Windows.Forms.DragEventHandler (this.richTextBox1_DragDrop);
this.richTextBox1.add_DragDrop(new System.Windows.Forms.DragEventHandler(this.richTextBox1_DragDrop));
this->richTextBox1->DragDrop += gcnew System::Windows::Forms::DragEventHandler (this, &Form1::richTextBox1_DragDrop);
在应用程序中测试拖放功能
保存并生成应用程序。在它运行时运行“写字板”。
“写字板”是一个由 Windows 安装的文本编辑器,它允许进行拖放操作。可以通过下面的方法访问它:单击“开始”按钮,选择“运行”,在“运行”对话框中键入“WordPad”,然后单击“确定”。
打开“写字板”后,在其中键入一个文本字符串。用鼠标选定该文本,再将选定的文本拖动到 Windows 应用程序中的 RichTextBox 控件中。
注意,将鼠标指向 RichTextBox 控件时(并由此引发 DragEnter 事件),鼠标指针将更改形状,此时可将选定的文本放入 RichTextBox 控件中。
当释放鼠标按钮时,选定的文本就会被放下(即引发 DragDrop 事件),并被插入到 RichTextBox 控件中。