Практическое руководство. Разрешение операций перетаскивания для элемента управления 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 .