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


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

См. также