Перетаскивание текста в C#

В этом примере показано, как позволить программе перетаскивать текст как между его элементами управления, так и с помощью элементов управления перетаскиванием в других приложениях.

Во-первых, чтобы получить падение, вы должны установить свойство AllowDrop элемента управления true. Если вы забудете сделать это (очень распространенная ошибка), то перетаскивание кажется неэффективным, и вы можете очень запутаться, пытаясь понять, почему это не сработает.

Чтобы начать перетаскивание, используйте метод DoDragDrop элемента управления. Элемент управления, запускающий перетаскивание, называется источником сопротивления . Следующий код запускает перетаскивание, когда пользователь нажимает правую кнопку мыши над меткой lblDragSource.

// Начните перетаскивание, которое копирует текст.
private void lblDragSource_MouseDown(object sender,
    MouseEventArgs e)
{
    // Запустите перетаскивание, если это правая кнопка мыши.
    if (e.Button == MouseButtons.Right)
    {
        lblDragSource.DoDragDrop("Here's some text!",
            DragDropEffects.Copy);
    }
}

Код передает данные «Вот какой текст!» в метод DoDragDrop. Это сообщает системе, какие данные вы хотите сбросить. Второй параметр указывает, что элемент управления предлагает копировать текст, а не перемещать его или выполнять некоторые другие действия.

Когда перетаскивание перемещается над элементом управления с AllowDrop = true, срабатывает событие DragEnter. Этот элемент управления называется целевым объектом .

// Укажем, что мы можем принять копию текста.
private void lblDropTarget_DragEnter(object sender,
    DragEventArgs e)
{
    // Смотрите, является ли это копией, а данные содержат текст.
    if (e.Data.GetDataPresent(DataFormats.Text) &&
        (e.AllowedEffect & DragDropEffects.Copy) != 0)
    {
        // Разрешить это.
        e.Effect = DragDropEffects.Copy;
    }
    else
    {
        // Не разрешайте другие капли.
        e.Effect = DragDropEffects.None;
    }
}

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

Перетаскивание может одновременно выполнять другие операции. Вот почему код использует & amp; чтобы увидеть, есть ли e.AllowedEffect бит, соответствующий операции копирования.

Код сообщает системе перетаскивания, какой именно курсор отображать, установив e.Effect. В этом примере, если текст доступен для копирования, код устанавливает эффект на Copy, чтобы указать, что элемент управления может принять копию. Если текст недоступен или операция копирования не предлагается источником перетаскивания, элемент управления не дает эффекта.

Наконец, когда пользователь удаляет текст поверх целевой цели, которая разрешает текущую операцию, срабатывает событие DragDrop.

// Принять падение.
private void lblDropTarget_DragDrop(object sender, DragEventArgs e)
{
    lblDropTarget.Text = (string)e.Data.GetData(DataFormats.Text);
}

В этом примере код получает объект данных e.Data, использует его метод GetData для получения доступных текстовых данных и отображает его в целевой точке label lblDropTarget.

Источник: http://csharphelper.com/blog/2015/02/drag-and-drop-text-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector