Практическое руководство. Включение операций перетаскивания с помощью элемента управления RichTextBox в Windows Forms
Операции перетаскивания с элементом управления RichTextBox Windows Forms выполняются путем обработки событий 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 для извлечения перетаскиваемых данных.
В приведенном ниже примере код задает свойство Text элемента управления RichTextBox, равное перетаскиваемой данным. Если в элементе управления 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 введите строку текста в нем. С помощью мыши выделите текст и перетащите выделенный текст на элемент управления RichTextBox в приложении Windows.
Обратите внимание, что при наведении курсора мыши на элемент управления RichTextBox (и, следовательно, происходит событие DragEnter), указатель мыши изменяется, и вы можете переместить выделенный текст в контрол RichTextBox.
При освобождении кнопки мыши выделенный текст удаляется (то есть вызывается событие DragDrop) и вставляется в элемент управления RichTextBox.
См. также
.NET Desktop feedback