Прочитать на английском

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


DragDropEffects Перечисление

Определение

Указывает, возможные результаты операции перетаскивания.

Это перечисление поддерживает побитовую комбинацию значений его членов.

C#
[System.Flags]
public enum DragDropEffects
Наследование
DragDropEffects
Атрибуты

Поля

All -2147483645

Сочетание результатов операций Copy, Move и Scroll.

Copy 1

Данные из источника перетаскивания копируются в целевой объект.

4

Данные из источника перетаскивания связываются с целевым объектом.

Move 2

Данные из источника перетаскивания перемещаются в целевой объект.

None 0

Целевой объект не принимает данные.

Scroll -2147483648

Целевой объект можно прокрутить во время операции перетаскивания, если нужная область целевого объекта в настоящий момент не отображается.

Примеры

В следующем примере показано использование DragDropEffects перечисления, когда пользователь перемещает указатель мыши на целевой объект перетаскивания во время операции перетаскивания. Этот пример является частью более крупного примера, предоставленного Control.DoDragDrop для метода.

C#
private void ListDragTarget_DragOver(object sender, DragEventArgs e)
{
    // Determine whether string data exists in the drop data. If not, then
    // the drop effect reflects that the drop cannot occur.
    if (!e.Data.GetDataPresent(typeof(System.String)))
    {
        e.Effect = DragDropEffects.None;
        DropLocationLabel.Text = "None - no string data.";
        return;
    }

    // Set the effect based upon the KeyState.
    if ((e.KeyState & (8 + 32)) == (8 + 32) &&
        (e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link)
    {
        // KeyState 8 + 32 = CTRL + ALT

        // Link drag-and-drop effect.
        e.Effect = DragDropEffects.Link;
    }
    else if ((e.KeyState & 32) == 32 &&
        (e.AllowedEffect & DragDropEffects.Link) == DragDropEffects.Link)
    {
        // ALT KeyState for link.
        e.Effect = DragDropEffects.Link;
    }
    else if ((e.KeyState & 4) == 4 &&
        (e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)
    {
        // SHIFT KeyState for move.
        e.Effect = DragDropEffects.Move;
    }
    else if ((e.KeyState & 8) == 8 &&
        (e.AllowedEffect & DragDropEffects.Copy) == DragDropEffects.Copy)
    {
        // CTRL KeyState for copy.
        e.Effect = DragDropEffects.Copy;
    }
    else if ((e.AllowedEffect & DragDropEffects.Move) == DragDropEffects.Move)
    {
        // By default, the drop action should be move, if allowed.
        e.Effect = DragDropEffects.Move;
    }
    else
    {
        e.Effect = DragDropEffects.None;
    }

    // Get the index of the item the mouse is below. 

    // The mouse locations are relative to the screen, so they must be 
    // converted to client coordinates.

    indexOfItemUnderMouseToDrop =
        ListDragTarget.IndexFromPoint(ListDragTarget.PointToClient(new Point(e.X, e.Y)));

    // Updates the label text.
    if (indexOfItemUnderMouseToDrop != ListBox.NoMatches)
    {
        DropLocationLabel.Text = "Drops before item #" + (indexOfItemUnderMouseToDrop + 1);
    }
    else
    {
        DropLocationLabel.Text = "Drops at the end.";
    }
}

Комментарии

Это перечисление используется классами , и Control классамиDragEventArgsGiveFeedbackEventArgs.

Можно использовать для DragDropEffects отображения различных указателей мыши для операций перетаскивания. Например, можно отобразить символ "плюс" для Copy операции перетаскивания, символ стрелки для Move операции перетаскивания или красный круг с линией через нее None для операции перетаскивания.

Если вы хотите удалить данные в позиции в целевом объекте, который в данный момент не отображается, можно прокрутить целевой объект при перетаскивании. Если целевой объект не поддерживает прокрутку, перед началом операции перетаскивания необходимо убедиться, что положение перетаскивания отображается в целевом объекте. Ниже приведены некоторые сценарии, в которых может потребоваться прокрутить целевой объект.

  • Вы перетаскиваете текст в документ и хотите удалить его в позиции, не видимой в окне документа.

  • Вы перетаскиваете файл в дерево файлов и хотите удалить файл на узле, который не отображается в дереве файлов.

Применяется к

Продукт Версии
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
Windows Desktop 3.0, 3.1, 5, 6, 7

См. также раздел