英語で読む

次の方法で共有


DragDropEffects 列挙型

定義

ドラッグ アンド ドロップ操作の効果を指定します。

この列挙体は、メンバー値のビットごとの組み合わせをサポートしています。

C#
[System.Flags]
public enum DragDropEffects
継承
DragDropEffects
属性

フィールド

All -2147483645

CopyMove、および 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.";
    }
}

注釈

この列挙体は、、GiveFeedbackEventArgs、およびControlクラスによってDragEventArgs使用されます。

ドラッグ アンド ドロップ操作に異なるマウス ポインターを表示するために使用 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

こちらもご覧ください