Практическое руководство. Разрешение операций перетаскивания для элемента управления RichTextBox в Windows Forms
Обновлен: Ноябрь 2007
Операции перетаскивания для элемента управления Windows Forms 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(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 для извлечения перетаскиваемых данных.
В следующем примере кода, свойство 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 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);
Чтобы проверить выполнение операций перетаскивания в приложении
Сохраните и постройте приложение. Во время его выполнения запустите WordPad.
WordPad — это текстовый редактор операционной системы Windows, который поддерживает операции перетаскивания. Чтобы его запустить, можно нажать кнопку Пуск, выбрать Выполнить, ввести WordPad в текстовое поле диалогового окна Запуск программы и нажать кнопку OK.
В открывшемся окне WordPad введите строку текста. Используя мышь, выделите текст и перетащите его в элемент управления RichTextBox приложения Windows.
Обратите внимание, что, когда указатель мыши находится над элементом управления RichTextBox (и, следовательно, инициируется событие DragEnter), указатель мыши изменяется и можно освободить выделенный текст в элемент управления RichTextBox.
Если отпустить кнопку мыши, то выделенный текст останется на элементе управления (вызывается событие DragDrop) и добавится в элемент управления RichTextBox.
См. также
Задачи
Практическое руководство. Выполнение операции перетаскивания между приложениями
Ссылки
Другие ресурсы
Элемент управления RichTextBox (Windows Forms)
Элементы управления для использования в формах Windows Forms