Control.DragEnter イベント
オブジェクトがコントロールの境界内にドラッグされると発生します。
Public Event DragEnter As DragEventHandler
[C#]
public event DragEventHandler DragEnter;
[C++]
public: __event DragEventHandler* DragEnter;
[JScript] JScript では、このクラスで定義されているイベントを処理できます。ただし、独自に定義することはできません。
イベント データ
イベント ハンドラが、このイベントに関連するデータを含む、DragEventArgs 型の引数を受け取りました。次の DragEventArgs プロパティには、このイベントの固有の情報が記載されます。
プロパティ | 説明 |
---|---|
AllowedEffect | ドラッグ イベントの元の場所 (またはソース) で実行できるドラッグ アンド ドロップ操作を取得します。 |
Data | このイベントに関連付けられているデータを含む IDataObject を取得します。 |
Effect | ドラッグ アンド ドロップ操作のターゲットのドロップ効果を取得または設定します。 |
KeyState | マウス ボタンの状態と同様に、Shift、Ctrl、Alt の各キーの現在の状態を取得します。 |
X | マウス ポインタの x 座標 (画面座標) を取得します。 |
Y | マウス ポインタの y 座標 (画面座標) を取得します。 |
解説
DragEnter イベントは、ユーザーがドラッグ アンド ドロップ操作中、最初にマウス カーソルをコントロール上にドラッグすると発生します。
ドラッグ アンド ドロップ操作関連のイベントがどのように、いつ発生するかについて次に示します。
DoDragDrop メソッドは、現在のカーソル位置に従ってコントロールを判別します。次に、コントロールが有効なドロップ ターゲットかどうかを確認します。
コントロールが有効なドロップ ターゲットの場合、指定したドラッグ アンド ドロップの効果が付いた状態で GiveFeedback イベントが発生します。ドラッグ アンド ドロップ効果の一覧については、 DragDropEffects 列挙体を参照してください。
マウス カーソルの位置、キーボードの状態、およびマウス ボタンの状態の変更が監視されます。
- ユーザーがウィンドウの外に移動した場合、 DragLeave イベントが生成されます。
- マウスが別のコントロールに移動した場合は、そのコントロールの DragEnter が生成されます。
- マウスが移動しても同じコントロール内の場合は、 DragOver イベントが生成されます。
キーボードまたはマウス ボタンの状態に変更があった場合、 QueryContinueDrag イベントが生成され、このイベントの QueryContinueDragEventArgs の Action プロパティの値に応じて、ドラッグを継続するか、データをドロップするか、操作をキャンセルするかが判断されます。
- 値が DragAction.Continue の場合、操作を継続するための DragOver イベントが生成され、適切な視覚的フィードバックを設定できるように新しい効果による GiveFeedback イベントが生成されます。有効なドロップ効果の一覧については、 DragDropEffects 列挙体を参照してください。
メモ DragOver イベントおよび GiveFeedback イベントはペアになっています。したがって、マウスがドロップ ターゲットをまたがって移動した場合、マウスの位置に関する最新のフィードバックがユーザーに提示されます。
値が DragAction.Drop の場合、ドロップ効果の値がソースに返されます。ソース アプリケーションでは、ソース データに対して適切な操作を実行できます。たとえば、移動操作だった場合は、データの切り取りなどを実行できます。
値が DragAction.Cancel の場合、 DragLeave イベントが生成されます。
メモ DragEventArgs の X プロパティおよび Y プロパティは、クライアント座標ではなく、画面座標の値です。次の C# のコードでは、これらのプロパティをクライアントの Point に変換します。
Point clientPoint = targetControl.PointToClient(new Point(de.X, de.Y));
イベント処理の詳細については、「 イベントの利用 」を参照してください。
使用例
[Visual Basic, C#, C++] 2 つの ListBox コントロールの間でドラッグ アンド ドロップ操作を実行する例を次に示します。この例では、ドラッグ アクションが開始したときに DoDragDrop メソッドが呼び出されます。ドラッグ操作は、 MouseDown イベント実行中のマウス位置から SystemInformation.DragSize を超えてマウスが移動したときに開始されます。 IndexFromPoint メソッドは、 MouseDown イベントで、ドラッグする項目のインデックスを判別するために使用します。
[Visual Basic, C#, C++] この例では、ドラッグ アンド ドロップ操作でカスタム カーソルを使用する方法についても示します。この例では、2 つのカーソル ファイル (3dwarro.cur
と 3dwno.cur
) がアプリケーション ディレクトリ内に存在していることを想定しています。なお、それぞれのファイルはドラッグ用のカスタム カーソルとドロップなしのカスタム カーソルを表します。カスタム カーソルは、 UseCustomCursorsCheck
CheckBox がオンになっている場合に使用されます。カスタム カーソルは、 GiveFeedback イベント ハンドラで設定されます。
[Visual Basic, C#, C++] キーボードの状態は、右側の ListBox の DragOver イベント ハンドラで評価されます。ドラッグ操作の内容は、Shift キー、Ctrl キー、Alt キー、または Ctrl + Alt キーの状態によって決まります。ドロップが発生する ListBox 内の位置は、 DragOver イベント時にも判定されます。ドロップするデータが String でない場合は、 DragEventArgs.Effect が DragDropEffects.None に設定されます。最後に、ドロップのステータスが DropLocationLabel
Label に表示されます。
[Visual Basic, C#, C++] 右側の ListBox にドロップするデータは、 DragDrop イベント ハンドラで判定されます。また、 String 値が ListBox の該当する場所に追加されます。ドラッグ操作がフォームの範囲を超えて移動した場合、ドラッグ アンド ドロップ操作は QueryContinueDrag イベント ハンドラでキャンセルされます。
[Visual Basic, C#, C++] DragEnter イベントの使用方法を次のコード例に示します。コード例全体については、 DoDragDrop メソッドのトピックを参照してください。
Private Sub ListDragTarget_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListDragTarget.DragEnter
' Reset the label text.
DropLocationLabel.Text = "None"
End Sub
[C#]
private void ListDragTarget_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) {
// Reset the label text.
DropLocationLabel.Text = "None";
}
[C++]
private:
void ListDragTarget_DragEnter(Object* /*sender*/, System::Windows::Forms::DragEventArgs* /*e*/) {
// Reset the label text.
DropLocationLabel->Text = S"None";
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
参照
Control クラス | Control メンバ | System.Windows.Forms 名前空間 | OnDragEnter