Поделиться через


Практическое руководство. Разрешение операций перетаскивания для элемента управления RichTextBox в Windows Forms

Обновлен: Ноябрь 2007

Операции перетаскивания для элемента управления Windows Forms RichTextBox производятся путем обработки событий DragEnter и DragDrop. Благодаря этому выполнять операции перетаскивания с помощью элемента управления RichTextBox исключительно просто.

Чтобы включить операции перетаскивания в элементе управления RichTextBox

  1. Задайте для свойства AllowDrop элемента управления RichTextBox значение true.

  2. Напишите код в обработчике событий события 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);
    
  3. Напишите обработчик события 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);
    

Чтобы проверить выполнение операций перетаскивания в приложении

  1. Сохраните и постройте приложение. Во время его выполнения запустите WordPad.

    WordPad — это текстовый редактор операционной системы Windows, который поддерживает операции перетаскивания. Чтобы его запустить, можно нажать кнопку Пуск, выбрать Выполнить, ввести WordPad в текстовое поле диалогового окна Запуск программы и нажать кнопку OK.

  2. В открывшемся окне WordPad введите строку текста. Используя мышь, выделите текст и перетащите его в элемент управления RichTextBox приложения Windows.

    Обратите внимание, что, когда указатель мыши находится над элементом управления RichTextBox (и, следовательно, инициируется событие DragEnter), указатель мыши изменяется и можно освободить выделенный текст в элемент управления RichTextBox.

    Если отпустить кнопку мыши, то выделенный текст останется на элементе управления (вызывается событие DragDrop) и добавится в элемент управления RichTextBox.

См. также

Задачи

Практическое руководство. Выполнение операции перетаскивания между приложениями

Ссылки

RichTextBox

Другие ресурсы

Элемент управления RichTextBox (Windows Forms)

Элементы управления для использования в формах Windows Forms