Операция Drag-and-Drop
Операция Drag-and-Drop предназначена для перемещения и копирования объектов при помощи мыши. Выделив фрагмент текста в Microsoft Word, его можно перетащить в другой документ или в другую позицию текущего документа, нажав и затем отпустив левую кнопку мыши (рис. 3.1).
Рис. 3.1. Перетаскивание выделенного фрагмента текста
Создайте новое приложение и назовите его DragAndDrop. Расположите на форме два элемента TextBox и один ReachTextBox, установив следующие значения свойств:
Name | textBox1 |
Location | 48; 16 |
Size | 184; 20 |
Text | Текст для перетаскивания |
Name | textBox2 |
AllowDrop | True |
Location | 48; 64 |
Size | 184; 20 |
Text | Сюда можно поместить текст |
Name | richTextBox1 |
AllowDrop | True |
Dock | Bottom |
Location | 0; 130 |
Text | Текст для Microsoft Word |
Значение True свойства AllowDrop разрешает размещение текстового фрагмента в данном элементе. Выделяем элемент textBox1, в окне Properties переключаемся на его события и дважды щелкаем в поле MouseDown. В обработчике этого события вызываем метод DoDragDrop:
private void textBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { textBox1.DoDragDrop(textBox1.Text, DragDropEffects.Copy); }
В качестве второго параметра метода мы передаем одно из значений перечисления DragDropEffects — здесь мы выбрали копирование текста Copy. Итак, при нажатой кнопке мыши содержимое текста первого текстового поля будет скопировано. В окне Properties второго элемента TextBox дважды щелкаем в поле события DragEnter. В обработчике этого события будем проверять соответствие представляемых данных формату String:
private void textBox2_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.StringFormat)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; }
И наконец, при отпускании кнопки мыши в поле этого же элемента будет выводиться скопированный текст:
private void textBox2_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { textBox2.Text = e.Data.GetData(DataFormats.StringFormat).ToString(); }