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


Практическое руководство. Включение операций перетаскивания с помощью элемента управления RichTextBox в Windows Forms

Операции перетаскивания с элементом управления RichTextBox Windows Forms выполняются путем обработки событий 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(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);  
    
  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:  
       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);  
    

Тестирование функций перетаскивания в приложении

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

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

  2. После открытия WordPad введите строку текста в нем. С помощью мыши выделите текст и перетащите выделенный текст на элемент управления RichTextBox в приложении Windows.

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

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

См. также