Control.DoDragDrop メソッド
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)

Public Function DoDragDrop ( _ data As Object, _ allowedEffects As DragDropEffects _ ) As DragDropEffects
Dim instance As Control Dim data As Object Dim allowedEffects As DragDropEffects Dim returnValue As DragDropEffects returnValue = instance.DoDragDrop(data, allowedEffects)
- allowedEffects
DragDropEffects 値の 1 つ。
ドラッグ アンド ドロップ操作中に実行された最終的な効果を表す、DragDropEffects 列挙体からの値。

allowedEffects パラメータは、どのドラッグ操作が発生できるかを決定します。ドラッグ操作が別のプロセスのアプリケーションと相互運用する必要がある場合、データは、基本マネージ クラス (String、Bitmap、または Metafile)、あるいは ISerializable または IDataObject を実装するオブジェクトのいずれかである必要があります。
ドラッグ アンド ドロップ操作関連のイベントがどのように、いつ発生するかについて次に示します。
DoDragDrop メソッドは、現在のカーソル位置に従ってコントロールを判別します。次に、コントロールが有効なドロップ ターゲットかどうかを確認します。
コントロールが有効なドロップ ターゲットの場合、指定したドラッグ アンド ドロップの効果が付いた状態で GiveFeedback イベントが発生します。ドラッグ アンド ドロップ効果の一覧については、DragDropEffects 列挙体を参照してください。
マウス カーソルの位置、キーボードの状態、およびマウス ボタンの状態の変更が監視されます。
キーボードまたはマウス ボタンの状態に変更があった場合、QueryContinueDrag イベントが生成され、このイベントの QueryContinueDragEventArgs の Action プロパティの値に応じて、ドラッグを継続するか、データをドロップするか、操作をキャンセルするかが判断されます。
-
DragAction の値が Continue の場合、操作を継続するための DragOver イベントが生成され、適切な視覚的フィードバックを設定できるように新しい効果による GiveFeedback イベントが生成されます。有効なドロップ効果の一覧については、DragDropEffects 列挙体を参照してください。
メモ
DragOver イベントおよび GiveFeedback イベントはペアになっています。したがって、マウスがドロップ ターゲットをまたがって移動した場合、マウスの位置に関する最新のフィードバックがユーザーに提示されます。
-
DragAction の値が Drop の場合、ドロップ効果の値がソースに返されます。ソース アプリケーションでは、ソース データに対して適切な操作を実行できます。たとえば、移動操作だった場合は、データの切り取りなどを実行できます。

2 つの ListBox コントロールの間でドラッグ アンド ドロップ操作を実行するコード例を次に示します。この例では、ドラッグ アクションが開始したときに DoDragDrop メソッドが呼び出されます。ドラッグ操作は、MouseDown イベント実行中のマウス位置から SystemInformation.DragSize を超えてマウスが移動したときに開始されます。IndexFromPoint メソッドは、MouseDown イベントで、ドラッグする項目のインデックスを判別するために使用します。
この例では、ドラッグ アンド ドロップ操作でカスタム カーソルを使用する方法についても示します。この例では、2 つのカーソル ファイル (3dwarro.cur と 3dwno.cur) がアプリケーション ディレクトリ内に存在している必要があります。なお、それぞれのファイルはドラッグ用のカスタム カーソルとドロップなしのカスタム カーソルを表します。カスタム カーソルは、UseCustomCursorsCheckCheckBox がオンになっている場合に使用されます。カスタム カーソルは、GiveFeedback イベント ハンドラで設定されます。
キーボードの状態は、右側の ListBox の DragOver イベント ハンドラで評価されます。ドラッグ操作の内容は、Shift キー、Ctrl キー、Alt キー、または Ctrl + Alt キーの状態によって決まります。ドロップが発生する ListBox 内の位置は、DragOver イベント時にも判定されます。ドロップするデータが String でない場合は、DragEventArgs.Effect が DragDropEffects で None に設定されます。最後に、ドロップのステータスが DropLocationLabelLabel に表示されます。
右側の ListBox にドロップするデータは、DragDrop イベント ハンドラで判定されます。また、String 値が ListBox の該当する場所に追加されます。ドラッグ操作がフォームの範囲を超えて移動した場合、ドラッグ アンド ドロップ操作は QueryContinueDrag イベント ハンドラでキャンセルされます。
Imports System Imports System.Drawing Imports System.Windows.Forms Public NotInheritable Class Form1 Inherits System.Windows.Forms.Form Friend WithEvents ListDragSource As System.Windows.Forms.ListBox Friend WithEvents ListDragTarget As System.Windows.Forms.ListBox Friend WithEvents UseCustomCursorsCheck As System.Windows.Forms.CheckBox Friend WithEvents DropLocationLabel As System.Windows.Forms.Label Private indexOfItemUnderMouseToDrag As Integer Private indexOfItemUnderMouseToDrop As Integer Private dragBoxFromMouseDown As Rectangle Private screenOffset as Point Private MyNoDropCursor As Cursor Private MyNormalCursor As Cursor <System.STAThread()> _ Public Shared Sub Main() System.Windows.Forms.Application.Run(New Form1()) End Sub 'Main Public Sub New() MyBase.New() Me.ListDragSource = New System.Windows.Forms.ListBox() Me.ListDragTarget = New System.Windows.Forms.ListBox() Me.UseCustomCursorsCheck = New System.Windows.Forms.CheckBox() Me.DropLocationLabel = New System.Windows.Forms.Label() Me.SuspendLayout() ' ListDragSource Me.ListDragSource.Items.AddRange(New Object() {"one", "two", "three", "four", _ "five", "six", "seven", "eight", _ "nine", "ten"}) Me.ListDragSource.Location = New System.Drawing.Point(10, 17) Me.ListDragSource.Size = New System.Drawing.Size(120, 225) ' ListDragTarget Me.ListDragTarget.AllowDrop = True Me.ListDragTarget.Location = New System.Drawing.Point(154, 17) Me.ListDragTarget.Size = New System.Drawing.Size(120, 225) ' UseCustomCursorsCheck Me.UseCustomCursorsCheck.Location = New System.Drawing.Point(10, 243) Me.UseCustomCursorsCheck.Size = New System.Drawing.Size(137, 24) Me.UseCustomCursorsCheck.Text = "Use Custom Cursors" ' DropLocationLabel Me.DropLocationLabel.Location = New System.Drawing.Point(154, 245) Me.DropLocationLabel.Size = New System.Drawing.Size(137, 24) Me.DropLocationLabel.Text = "None" ' Form1 Me.ClientSize = New System.Drawing.Size(292, 270) Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.ListDragSource, _ Me.ListDragTarget, Me.UseCustomCursorsCheck, _ Me.DropLocationLabel}) Me.Text = "drag-and-drop Example" Me.ResumeLayout(False) End Sub Private Sub ListDragSource_MouseDown(ByVal sender As Object, ByVal e As MouseEventArgs) Handles ListDragSource.MouseDown ' Get the index of the item the mouse is below. indexOfItemUnderMouseToDrag = ListDragSource.IndexFromPoint(e.X, e.Y) If (indexOfItemUnderMouseToDrag <> ListBox.NoMatches) Then ' Remember the point where the mouse down occurred. The DragSize indicates ' the size that the mouse can move before a drag event should be started. Dim dragSize As Size = SystemInformation.DragSize ' Create a rectangle using the DragSize, with the mouse position being ' at the center of the rectangle. dragBoxFromMouseDown = New Rectangle(New Point(e.X - (dragSize.Width / 2), _ e.Y - (dragSize.Height / 2)), dragSize) Else ' Reset the rectangle if the mouse is not over an item in the ListBox. dragBoxFromMouseDown = Rectangle.Empty End If End Sub Private Sub ListDragSource_MouseUp(ByVal sender As Object, ByVal e As MouseEventArgs) Handles ListDragSource.MouseUp ' Reset the drag rectangle when the mouse button is raised. dragBoxFromMouseDown = Rectangle.Empty End Sub Private Sub ListDragSource_MouseMove(ByVal sender As Object, ByVal e As MouseEventArgs) Handles ListDragSource.MouseMove If ((e.Button And MouseButtons.Left) = MouseButtons.Left) Then ' If the mouse moves outside the rectangle, start the drag. If (Rectangle.op_Inequality(dragBoxFromMouseDown, Rectangle.Empty) And _ Not dragBoxFromMouseDown.Contains(e.X, e.Y)) Then ' Creates custom cursors for the drag-and-drop operation. Try MyNormalCursor = New Cursor("3dwarro.cur") MyNoDropCursor = New Cursor("3dwno.cur") Catch ' An error occurred while attempting to load the cursors so use ' standard cursors. UseCustomCursorsCheck.Checked = False Finally ' The screenOffset is used to account for any desktop bands ' that may be at the top or left side of the screen when ' determining when to cancel the drag drop operation. screenOffset = SystemInformation.WorkingArea.Location ' Proceed with the drag-and-drop, passing in the list item. Dim dropEffect As DragDropEffects = ListDragSource.DoDragDrop(ListDragSource.Items(indexOfItemUnderMouseToDrag), _ DragDropEffects.All Or DragDropEffects.Link) ' If the drag operation was a move then remove the item. If (dropEffect = DragDropEffects.Move) Then ListDragSource.Items.RemoveAt(indexOfItemUnderMouseToDrag) ' Select the previous item in the list as long as the list has an item. If (indexOfItemUnderMouseToDrag > 0) Then ListDragSource.SelectedIndex = indexOfItemUnderMouseToDrag - 1 ElseIf (ListDragSource.Items.Count > 0) Then ' Selects the first item. ListDragSource.SelectedIndex = 0 End If End If ' Dispose the cursors since they are no longer needed. If (Not MyNormalCursor Is Nothing) Then _ MyNormalCursor.Dispose() If (Not MyNoDropCursor Is Nothing) Then _ MyNoDropCursor.Dispose() End Try End If End If End Sub Private Sub ListDragSource_GiveFeedback(ByVal sender As Object, ByVal e As GiveFeedbackEventArgs) Handles ListDragSource.GiveFeedback ' Use custom cursors if the check box is checked. If (UseCustomCursorsCheck.Checked) Then ' Set the custom cursor based upon the effect. e.UseDefaultCursors = False If ((e.Effect And DragDropEffects.Move) = DragDropEffects.Move) Then Cursor.Current = MyNormalCursor Else Cursor.Current = MyNoDropCursor End If End If End Sub Private Sub ListDragTarget_DragOver(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListDragTarget.DragOver ' Determine whether string data exists in the drop data. If not, then ' the drop effect reflects that the drop cannot occur. If Not (e.Data.GetDataPresent(GetType(System.String))) Then e.Effect = DragDropEffects.None DropLocationLabel.Text = "None - no string data." Return End If ' Set the effect based upon the KeyState. If ((e.KeyState And (8 + 32)) = (8 + 32) And _ (e.AllowedEffect And DragDropEffects.Link) = DragDropEffects.Link) Then ' KeyState 8 + 32 = CTL + ALT ' Link drag-and-drop effect. e.Effect = DragDropEffects.Link ElseIf ((e.KeyState And 32) = 32 And _ (e.AllowedEffect And DragDropEffects.Link) = DragDropEffects.Link) Then ' ALT KeyState for link. e.Effect = DragDropEffects.Link ElseIf ((e.KeyState And 4) = 4 And _ (e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move) Then ' SHIFT KeyState for move. e.Effect = DragDropEffects.Move ElseIf ((e.KeyState And 8) = 8 And _ (e.AllowedEffect And DragDropEffects.Copy) = DragDropEffects.Copy) Then ' CTL KeyState for copy. e.Effect = DragDropEffects.Copy ElseIf ((e.AllowedEffect And DragDropEffects.Move) = DragDropEffects.Move) Then ' By default, the drop action should be move, if allowed. e.Effect = DragDropEffects.Move Else e.Effect = DragDropEffects.None End If ' Gets 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) Then DropLocationLabel.Text = "Drops before item #" & (indexOfItemUnderMouseToDrop + 1) Else DropLocationLabel.Text = "Drops at the end." End If End Sub Private Sub ListDragTarget_DragDrop(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListDragTarget.DragDrop ' Ensures that the list item index is contained in the data. If (e.Data.GetDataPresent(GetType(System.String))) Then Dim item As Object = CType(e.Data.GetData(GetType(System.String)), System.Object) ' Perform drag-and-drop, depending upon the effect. If (e.Effect = DragDropEffects.Copy Or _ e.Effect = DragDropEffects.Move) Then ' Insert the item. If (indexOfItemUnderMouseToDrop <> ListBox.NoMatches) Then ListDragTarget.Items.Insert(indexOfItemUnderMouseToDrop, item) Else ListDragTarget.Items.Add(item) End If End If ' Reset the label text. DropLocationLabel.Text = "None" End If End Sub Private Sub ListDragSource_QueryContinueDrag(ByVal sender As Object, ByVal e As QueryContinueDragEventArgs) Handles ListDragSource.QueryContinueDrag ' Cancel the drag if the mouse moves off the form. Dim lb as ListBox = CType(sender, System.Windows.Forms.ListBox) If Not (lb is nothing) Then Dim f as Form = lb.FindForm() ' Cancel the drag if the mouse moves off the form. The screenOffset ' takes into account any desktop bands that may be at the top or left ' side of the screen. If (((Control.MousePosition.X - screenOffset.X) < f.DesktopBounds.Left) Or _ ((Control.MousePosition.X - screenOffset.X) > f.DesktopBounds.Right) Or _ ((Control.MousePosition.Y - screenOffset.Y) < f.DesktopBounds.Top) Or _ ((Control.MousePosition.Y - screenOffset.Y) > f.DesktopBounds.Bottom)) Then e.Action = DragAction.Cancel End If End if End Sub Private Sub ListDragTarget_DragEnter(ByVal sender As Object, ByVal e As DragEventArgs) Handles ListDragTarget.DragEnter ' Reset the label text. DropLocationLabel.Text = "None" End Sub Private Sub ListDragTarget_DragLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListDragTarget.DragLeave ' Reset the label text. DropLocationLabel.Text = "None" End Sub End Class
using System; using System.Drawing; using System.Windows.Forms; namespace Snip_DragNDrop { public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.ListBox ListDragSource; private System.Windows.Forms.ListBox ListDragTarget; private System.Windows.Forms.CheckBox UseCustomCursorsCheck; private System.Windows.Forms.Label DropLocationLabel; private int indexOfItemUnderMouseToDrag; private int indexOfItemUnderMouseToDrop; private Rectangle dragBoxFromMouseDown; private Point screenOffset; private Cursor MyNoDropCursor; private Cursor MyNormalCursor; /// The main entry point for the application. [STAThread] static void Main() { Application.Run(new Form1()); } public Form1() { this.ListDragSource = new System.Windows.Forms.ListBox(); this.ListDragTarget = new System.Windows.Forms.ListBox(); this.UseCustomCursorsCheck = new System.Windows.Forms.CheckBox(); this.DropLocationLabel = new System.Windows.Forms.Label(); this.SuspendLayout(); // ListDragSource this.ListDragSource.Items.AddRange(new object[] {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"}); this.ListDragSource.Location = new System.Drawing.Point(10, 17); this.ListDragSource.Size = new System.Drawing.Size(120, 225); this.ListDragSource.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ListDragSource_MouseDown); this.ListDragSource.QueryContinueDrag += new System.Windows.Forms.QueryContinueDragEventHandler(this.ListDragSource_QueryContinueDrag); this.ListDragSource.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ListDragSource_MouseUp); this.ListDragSource.MouseMove += new System.Windows.Forms.MouseEventHandler(this.ListDragSource_MouseMove); this.ListDragSource.GiveFeedback += new System.Windows.Forms.GiveFeedbackEventHandler(this.ListDragSource_GiveFeedback); // ListDragTarget this.ListDragTarget.AllowDrop = true; this.ListDragTarget.Location = new System.Drawing.Point(154, 17); this.ListDragTarget.Size = new System.Drawing.Size(120, 225); this.ListDragTarget.DragOver += new System.Windows.Forms.DragEventHandler(this.ListDragTarget_DragOver); this.ListDragTarget.DragDrop += new System.Windows.Forms.DragEventHandler(this.ListDragTarget_DragDrop); this.ListDragTarget.DragEnter += new System.Windows.Forms.DragEventHandler(this.ListDragTarget_DragEnter); this.ListDragTarget.DragLeave += new System.EventHandler(this.ListDragTarget_DragLeave); // UseCustomCursorsCheck this.UseCustomCursorsCheck.Location = new System.Drawing.Point(10, 243); this.UseCustomCursorsCheck.Size = new System.Drawing.Size(137, 24); this.UseCustomCursorsCheck.Text = "Use Custom Cursors"; // DropLocationLabel this.DropLocationLabel.Location = new System.Drawing.Point(154, 245); this.DropLocationLabel.Size = new System.Drawing.Size(137, 24); this.DropLocationLabel.Text = "None"; // Form1 this.ClientSize = new System.Drawing.Size(292, 270); this.Controls.AddRange(new System.Windows.Forms.Control[] {this.ListDragSource, this.ListDragTarget, this.UseCustomCursorsCheck, this.DropLocationLabel}); this.Text = "drag-and-drop Example"; this.ResumeLayout(false); } private void ListDragSource_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { // Get the index of the item the mouse is below. indexOfItemUnderMouseToDrag = ListDragSource.IndexFromPoint(e.X, e.Y); if (indexOfItemUnderMouseToDrag != ListBox.NoMatches) { // Remember the point where the mouse down occurred. The DragSize indicates // the size that the mouse can move before a drag event should be started. Size dragSize = SystemInformation.DragSize; // Create a rectangle using the DragSize, with the mouse position being // at the center of the rectangle. dragBoxFromMouseDown = new Rectangle(new Point(e.X - (dragSize.Width /2), e.Y - (dragSize.Height /2)), dragSize); } else // Reset the rectangle if the mouse is not over an item in the ListBox. dragBoxFromMouseDown = Rectangle.Empty; } private void ListDragSource_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { // Reset the drag rectangle when the mouse button is raised. dragBoxFromMouseDown = Rectangle.Empty; } private void ListDragSource_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) { if ((e.Button & MouseButtons.Left) == MouseButtons.Left) { // If the mouse moves outside the rectangle, start the drag. if (dragBoxFromMouseDown != Rectangle.Empty && !dragBoxFromMouseDown.Contains(e.X, e.Y)) { // Create custom cursors for the drag-and-drop operation. try { MyNormalCursor = new Cursor("3dwarro.cur"); MyNoDropCursor = new Cursor("3dwno.cur"); } catch { // An error occurred while attempting to load the cursors, so use // standard cursors. UseCustomCursorsCheck.Checked = false; }finally { // The screenOffset is used to account for any desktop bands // that may be at the top or left side of the screen when // determining when to cancel the drag drop operation. screenOffset = SystemInformation.WorkingArea.Location; // Proceed with the drag-and-drop, passing in the list item. DragDropEffects dropEffect = ListDragSource.DoDragDrop(ListDragSource.Items[indexOfItemUnderMouseToDrag], DragDropEffects.All | DragDropEffects.Link); // If the drag operation was a move then remove the item. if (dropEffect == DragDropEffects.Move) { ListDragSource.Items.RemoveAt(indexOfItemUnderMouseToDrag); // Selects the previous item in the list as long as the list has an item. if (indexOfItemUnderMouseToDrag > 0) ListDragSource.SelectedIndex = indexOfItemUnderMouseToDrag -1; else if (ListDragSource.Items.Count > 0) // Selects the first item. ListDragSource.SelectedIndex =0; } // Dispose of the cursors since they are no longer needed. if (MyNormalCursor != null) MyNormalCursor.Dispose(); if (MyNoDropCursor != null) MyNoDropCursor.Dispose(); } } } } private void ListDragSource_GiveFeedback(object sender, System.Windows.Forms.GiveFeedbackEventArgs e) { // Use custom cursors if the check box is checked. if (UseCustomCursorsCheck.Checked) { // Sets the custom cursor based upon the effect. e.UseDefaultCursors = false; if ((e.Effect & DragDropEffects.Move) == DragDropEffects.Move) Cursor.Current = MyNormalCursor; else Cursor.Current = MyNoDropCursor; } } private void ListDragTarget_DragOver(object sender, System.Windows.Forms.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 = CTL + 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) { // CTL 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."; } private void ListDragTarget_DragDrop(object sender, System.Windows.Forms.DragEventArgs e) { // Ensure that the list item index is contained in the data. if (e.Data.GetDataPresent(typeof(System.String))) { Object item = (object)e.Data.GetData(typeof(System.String)); // Perform drag-and-drop, depending upon the effect. if (e.Effect == DragDropEffects.Copy || e.Effect == DragDropEffects.Move) { // Insert the item. if (indexOfItemUnderMouseToDrop != ListBox.NoMatches) ListDragTarget.Items.Insert(indexOfItemUnderMouseToDrop, item); else ListDragTarget.Items.Add(item); } } // Reset the label text. DropLocationLabel.Text = "None"; } private void ListDragSource_QueryContinueDrag(object sender, System.Windows.Forms.QueryContinueDragEventArgs e) { // Cancel the drag if the mouse moves off the form. ListBox lb = sender as ListBox; if (lb != null) { Form f = lb.FindForm(); // Cancel the drag if the mouse moves off the form. The screenOffset // takes into account any desktop bands that may be at the top or left // side of the screen. if (((Control.MousePosition.X - screenOffset.X) < f.DesktopBounds.Left) || ((Control.MousePosition.X - screenOffset.X) > f.DesktopBounds.Right) || ((Control.MousePosition.Y - screenOffset.Y) < f.DesktopBounds.Top) || ((Control.MousePosition.Y - screenOffset.Y) > f.DesktopBounds.Bottom)) { e.Action = DragAction.Cancel; } } } private void ListDragTarget_DragEnter(object sender, System.Windows.Forms.DragEventArgs e) { // Reset the label text. DropLocationLabel.Text = "None"; } private void ListDragTarget_DragLeave(object sender, System.EventArgs e) { // Reset the label text. DropLocationLabel.Text = "None"; } } }
using namespace System; using namespace System::Drawing; using namespace System::Windows::Forms; namespace Snip_DragNDrop { public ref class Form1: public System::Windows::Forms::Form { private: System::Windows::Forms::ListBox^ ListDragSource; System::Windows::Forms::ListBox^ ListDragTarget; System::Windows::Forms::CheckBox^ UseCustomCursorsCheck; System::Windows::Forms::Label ^ DropLocationLabel; Int32 indexOfItemUnderMouseToDrag; Int32 indexOfItemUnderMouseToDrop; Rectangle dragBoxFromMouseDown; Point screenOffset; System::Windows::Forms::Cursor^ MyNoDropCursor; System::Windows::Forms::Cursor^ MyNormalCursor; public: Form1() { this->ListDragSource = gcnew System::Windows::Forms::ListBox; this->ListDragTarget = gcnew System::Windows::Forms::ListBox; this->UseCustomCursorsCheck = gcnew System::Windows::Forms::CheckBox; this->DropLocationLabel = gcnew System::Windows::Forms::Label; this->SuspendLayout(); // ListDragSource array<Object^>^temp0 = {"five","six","seven" ,"eight","nine","ten"}; this->ListDragSource->Items->AddRange( temp0 ); this->ListDragSource->Location = System::Drawing::Point( 10, 17 ); this->ListDragSource->Size = System::Drawing::Size( 120, 225 ); this->ListDragSource->MouseDown += gcnew System::Windows::Forms::MouseEventHandler( this, &Form1::ListDragSource_MouseDown ); this->ListDragSource->QueryContinueDrag += gcnew System::Windows::Forms::QueryContinueDragEventHandler( this, &Form1::ListDragSource_QueryContinueDrag ); this->ListDragSource->MouseUp += gcnew System::Windows::Forms::MouseEventHandler( this, &Form1::ListDragSource_MouseUp ); this->ListDragSource->MouseMove += gcnew System::Windows::Forms::MouseEventHandler( this, &Form1::ListDragSource_MouseMove ); this->ListDragSource->GiveFeedback += gcnew System::Windows::Forms::GiveFeedbackEventHandler( this, &Form1::ListDragSource_GiveFeedback ); // ListDragTarget this->ListDragTarget->AllowDrop = true; this->ListDragTarget->Location = System::Drawing::Point( 154, 17 ); this->ListDragTarget->Size = System::Drawing::Size( 120, 225 ); this->ListDragTarget->DragOver += gcnew System::Windows::Forms::DragEventHandler( this, &Form1::ListDragTarget_DragOver ); this->ListDragTarget->DragDrop += gcnew System::Windows::Forms::DragEventHandler( this, &Form1::ListDragTarget_DragDrop ); this->ListDragTarget->DragEnter += gcnew System::Windows::Forms::DragEventHandler( this, &Form1::ListDragTarget_DragEnter ); this->ListDragTarget->DragLeave += gcnew System::EventHandler( this, &Form1::ListDragTarget_DragLeave ); // UseCustomCursorsCheck this->UseCustomCursorsCheck->Location = System::Drawing::Point( 10, 243 ); this->UseCustomCursorsCheck->Size = System::Drawing::Size( 137, 24 ); this->UseCustomCursorsCheck->Text = "Use Custom Cursors"; // DropLocationLabel this->DropLocationLabel->Location = System::Drawing::Point( 154, 245 ); this->DropLocationLabel->Size = System::Drawing::Size( 137, 24 ); this->DropLocationLabel->Text = "None"; // Form1 this->ClientSize = System::Drawing::Size( 292, 270 ); array<System::Windows::Forms::Control^>^formControls = {this->ListDragSource ,this->ListDragTarget,this->UseCustomCursorsCheck ,this->DropLocationLabel}; this->Controls->AddRange( formControls ); this->Text = "drag-and-drop Example"; this->ResumeLayout( false ); } private: void ListDragSource_MouseDown( Object^ /*sender*/, System::Windows::Forms::MouseEventArgs^ e ) { // Get the index of the item the mouse is below. indexOfItemUnderMouseToDrag = this->ListDragSource->IndexFromPoint( e->X, e->Y ); if ( indexOfItemUnderMouseToDrag != ListBox::NoMatches ) { // Remember the point where the mouse down occurred. The DragSize indicates // the size that the mouse can move before a drag event should be started. System::Drawing::Size dragSize = SystemInformation::DragSize; // Create a rectangle using the DragSize, with the mouse position being // at the center of the rectangle. dragBoxFromMouseDown = Rectangle(Point(e->X - (dragSize.Width / 2),e->Y - (dragSize.Height / 2)),dragSize); } else dragBoxFromMouseDown = Rectangle::Empty; // Reset the rectangle if the mouse is not over an item in the ListBox. } void ListDragSource_MouseUp( Object^ /*sender*/, System::Windows::Forms::MouseEventArgs^ /*e*/ ) { // Reset the drag rectangle when the mouse button is raised. dragBoxFromMouseDown = Rectangle::Empty; } void ListDragSource_MouseMove( Object^ /*sender*/, System::Windows::Forms::MouseEventArgs^ e ) { if ( (e->Button & ::MouseButtons::Left) == ::MouseButtons::Left ) { // If the mouse moves outside the rectangle, start the drag. if ( dragBoxFromMouseDown != Rectangle::Empty && !dragBoxFromMouseDown.Contains( e->X, e->Y ) ) { // Create custom cursors for the drag-and-drop operation. try { MyNormalCursor = gcnew System::Windows::Forms::Cursor( "3dwarro.cur" ); MyNoDropCursor = gcnew System::Windows::Forms::Cursor( "3dwno.cur" ); } catch ( Exception^ ) { // An error occurred while attempting to load the cursors, so use // the standard cursors. this->UseCustomCursorsCheck->Checked = false; } __finally { // The screenOffset is used to account for any desktop bands // that may be at the top or left side of the screen when // determining when to cancel the drag drop operation. screenOffset = SystemInformation::WorkingArea.Location; // Proceed with the drag-and-drop, passing in the list item. DragDropEffects dropEffect = this->ListDragSource->DoDragDrop( ListDragSource->Items[ indexOfItemUnderMouseToDrag ], static_cast<DragDropEffects>(DragDropEffects::All | DragDropEffects::Link) ); // If the drag operation was a move then remove the item. if ( dropEffect == DragDropEffects::Move ) { ListDragSource->Items->RemoveAt( indexOfItemUnderMouseToDrag ); // Selects the previous item in the list as long as the list has an item. if ( indexOfItemUnderMouseToDrag > 0 ) ListDragSource->SelectedIndex = indexOfItemUnderMouseToDrag - 1; else if ( ListDragSource->Items->Count > 0 ) // Selects the first item. ListDragSource->SelectedIndex = 0; } // Dispose of the cursors since they are no longer needed. if ( MyNormalCursor != nullptr ) delete MyNormalCursor; if ( MyNoDropCursor != nullptr ) delete MyNoDropCursor; } } } } void ListDragSource_GiveFeedback( Object^ /*sender*/, System::Windows::Forms::GiveFeedbackEventArgs^ e ) { // Use custom cursors if the check box is checked. if ( UseCustomCursorsCheck->Checked ) { // Sets the custom cursor based upon the effect. e->UseDefaultCursors = false; if ( (e->Effect & DragDropEffects::Move) == DragDropEffects::Move ) ::Cursor::Current = MyNormalCursor; else ::Cursor::Current = MyNoDropCursor; } } void ListDragTarget_DragOver( Object^ /*sender*/, System::Windows::Forms::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( System::String::typeid ) ) { 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 = CTL + 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) ) { // CTL 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( Point(e->X,e->Y) ) ); // Updates the label text. if ( indexOfItemUnderMouseToDrop != ListBox::NoMatches ) { DropLocationLabel->Text = String::Concat( "Drops before item # ", (indexOfItemUnderMouseToDrop + 1) ); } else DropLocationLabel->Text = "Drops at the end."; } void ListDragTarget_DragDrop( Object^ /*sender*/, System::Windows::Forms::DragEventArgs^ e ) { // Ensure that the list item index is contained in the data. if ( e->Data->GetDataPresent( System::String::typeid ) ) { Object^ item = dynamic_cast<Object^>(e->Data->GetData( System::String::typeid )); // Perform drag-and-drop, depending upon the effect. if ( e->Effect == DragDropEffects::Copy || e->Effect == DragDropEffects::Move ) { // Insert the item. if ( indexOfItemUnderMouseToDrop != ListBox::NoMatches ) ListDragTarget->Items->Insert( indexOfItemUnderMouseToDrop, item ); else ListDragTarget->Items->Add( item ); } } // Reset the label text. DropLocationLabel->Text = "None"; } void ListDragSource_QueryContinueDrag( Object^ sender, System::Windows::Forms::QueryContinueDragEventArgs^ e ) { // Cancel the drag if the mouse moves off the form. ListBox^ lb = dynamic_cast<ListBox^>(sender); if ( lb != nullptr ) { Form^ f = lb->FindForm(); // Cancel the drag if the mouse moves off the form. The screenOffset // takes into account any desktop bands that may be at the top or left // side of the screen. if ( ((Control::MousePosition.X - screenOffset.X) < f->DesktopBounds.Left) || ((Control::MousePosition.X - screenOffset.X) > f->DesktopBounds.Right) || ((Control::MousePosition.Y - screenOffset.Y) < f->DesktopBounds.Top) || ((Control::MousePosition.Y - screenOffset.Y) > f->DesktopBounds.Bottom) ) { e->Action = DragAction::Cancel; } } } void ListDragTarget_DragEnter( Object^ /*sender*/, System::Windows::Forms::DragEventArgs^ /*e*/ ) { // Reset the label text. DropLocationLabel->Text = "None"; } void ListDragTarget_DragLeave( Object^ /*sender*/, System::EventArgs^ /*e*/ ) { // Reset the label text. DropLocationLabel->Text = "None"; } }; } /// The main entry point for the application. [STAThread] int main() { Application::Run( gcnew Snip_DragNDrop::Form1 ); }
package SnipDragNDrop; import System.*; import System.Drawing.*; import System.Windows.Forms.*; public class Form1 extends System.Windows.Forms.Form { private System.Windows.Forms.ListBox listDragSource; private System.Windows.Forms.ListBox listDragTarget; private System.Windows.Forms.CheckBox useCustomCursorsCheck; private System.Windows.Forms.Label dropLocationLabel; private int indexOfItemUnderMouseToDrag; private int indexOfItemUnderMouseToDrop; private Rectangle dragBoxFromMouseDown; private Point screenOffset; private Cursor myNoDropCursor; private Cursor myNormalCursor; /// The main entry point for the application. /** @attribute STAThread() */ public static void main(String[] args) { Application.Run(new Form1()); } //main public Form1() { this.listDragSource = new System.Windows.Forms.ListBox(); this.listDragTarget = new System.Windows.Forms.ListBox(); this.useCustomCursorsCheck = new System.Windows.Forms.CheckBox(); this.dropLocationLabel = new System.Windows.Forms.Label(); this.SuspendLayout(); // listDragSource this.listDragSource.get_Items().AddRange(new Object[] { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten" }); this.listDragSource.set_Location(new System.Drawing.Point(10, 17)); this.listDragSource.set_Size(new System.Drawing.Size(120, 225)); this.listDragSource.add_MouseDown( new System.Windows.Forms.MouseEventHandler( this.listDragSource_MouseDown)); this.listDragSource.add_QueryContinueDrag( new System.Windows.Forms.QueryContinueDragEventHandler( this.listDragSource_QueryContinueDrag)); this.listDragSource.add_MouseUp( new System.Windows.Forms.MouseEventHandler( this.listDragSource_MouseUp)); this.listDragSource.add_MouseMove( new System.Windows.Forms.MouseEventHandler( this.listDragSource_MouseMove)); this.listDragSource.add_GiveFeedback( new System.Windows.Forms.GiveFeedbackEventHandler( this.listDragSource_GiveFeedback)); // listDragTarget this.listDragTarget.set_AllowDrop(true); this.listDragTarget.set_Location(new System.Drawing.Point(154, 17)); this.listDragTarget.set_Size(new System.Drawing.Size(120, 225)); this.listDragTarget.add_DragOver( new System.Windows.Forms.DragEventHandler( this.listDragTarget_DragOver)); this.listDragTarget.add_DragDrop( new System.Windows.Forms.DragEventHandler( this.listDragTarget_DragDrop)); this.listDragTarget.add_DragEnter( new System.Windows.Forms.DragEventHandler( this.listDragTarget_DragEnter)); this.listDragTarget.add_DragLeave( new System.EventHandler(this.listDragTarget_DragLeave)); // useCustomCursorsCheck this.useCustomCursorsCheck.set_Location( new System.Drawing.Point(10, 243)); this.useCustomCursorsCheck.set_Size(new System.Drawing.Size(137, 24)); this.useCustomCursorsCheck.set_Text("Use Custom Cursors"); // dropLocationLabel this.dropLocationLabel.set_Location( new System.Drawing.Point(154, 245)); this.dropLocationLabel.set_Size(new System.Drawing.Size(137, 24)); this.dropLocationLabel.set_Text("None"); // Form1 this.set_ClientSize(new System.Drawing.Size(292, 270)); this.get_Controls().AddRange(new System.Windows.Forms.Control[] { this.listDragSource, this.listDragTarget, this.useCustomCursorsCheck, this.dropLocationLabel }); this.set_Text("drag-and-drop Example"); this.ResumeLayout(false); } //Form1 private void listDragSource_MouseDown(Object sender, System.Windows.Forms.MouseEventArgs e) { // Get the index of the item the mouse is below. indexOfItemUnderMouseToDrag = listDragSource.IndexFromPoint(e.get_X(), e.get_Y()); if (indexOfItemUnderMouseToDrag != ListBox.NoMatches) { // Remember the point where the mouse down occurred. The DragSize // indicates the size that the mouse can move before a drag event // should be started. Size dragSize = SystemInformation.get_DragSize(); // Create a rectangle using the DragSize, with the mouse position // being at the center of the rectangle. dragBoxFromMouseDown = new Rectangle(new Point(e.get_X() - dragSize.get_Width() / 2, e.get_Y() - dragSize.get_Height() / 2), dragSize); } // Reset the rectangle if the mouse is not over an item in the ListBox. else { dragBoxFromMouseDown = Rectangle.Empty; } } //listDragSource_MouseDown private void listDragSource_MouseUp(Object sender, System.Windows.Forms.MouseEventArgs e) { // Reset the drag rectangle when the mouse button is raised. dragBoxFromMouseDown = Rectangle.Empty; } //listDragSource_MouseUp private void listDragSource_MouseMove(Object sender, System.Windows.Forms.MouseEventArgs e) { if ((e.get_Button() & get_MouseButtons().Left) == get_MouseButtons().Left) { // If the mouse moves outside the rectangle, start the drag. if (!(dragBoxFromMouseDown.Equals(Rectangle.Empty)) && !(dragBoxFromMouseDown.Contains(e.get_X(), e.get_Y()))) { // Create custom cursors for the drag-and-drop operation. try { myNormalCursor = new Cursor("3dwarro.cur"); myNoDropCursor = new Cursor("3dwno.cur"); } catch (System.Exception exp) { // An error occurred while attempting to load the cursors, // so use standard cursors. useCustomCursorsCheck.set_Checked(false); } finally { // The screenOffset is used to account for any desktop bands // that may be at the top or left side of the screen when // determining when to cancel the drag drop operation. screenOffset = SystemInformation.get_WorkingArea().get_Location(); // Proceed with the drag-and-drop, passing in the list item. DragDropEffects dropEffect = listDragSource.DoDragDrop( listDragSource.get_Items().get_Item( indexOfItemUnderMouseToDrag), DragDropEffects.All | DragDropEffects.Link); // If the drag operation was a move then remove the item. if (dropEffect.Equals(DragDropEffects.Move)) { listDragSource.get_Items().RemoveAt( indexOfItemUnderMouseToDrag); // Selects the previous item in the list as long as the // list has an item. if (indexOfItemUnderMouseToDrag > 0) { listDragSource.set_SelectedIndex( indexOfItemUnderMouseToDrag - 1); } else { if (listDragSource.get_Items().get_Count() > 0) { // Selects the first item. listDragSource.set_SelectedIndex(0); } } } // Dispose of the cursors since they are no longer needed. if (myNormalCursor != null) { myNormalCursor.Dispose(); } if (myNoDropCursor != null) { myNoDropCursor.Dispose(); } } } } } //listDragSource_MouseMove private void listDragSource_GiveFeedback(Object sender, System.Windows.Forms.GiveFeedbackEventArgs e) { // Use custom cursors if the check box is checked. if (useCustomCursorsCheck.get_Checked()) { // Sets the custom cursor based upon the effect. e.set_UseDefaultCursors(false); if ((e.get_Effect() & DragDropEffects.Move) == DragDropEffects.Move) { get_Cursor().set_Current(myNormalCursor); } else { get_Cursor().set_Current(myNoDropCursor); } } } //listDragSource_GiveFeedback private void listDragTarget_DragOver(Object sender, System.Windows.Forms.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.get_Data().GetDataPresent(String.class.ToType()))) { e.set_Effect(DragDropEffects.None); dropLocationLabel.set_Text("None - no string data."); return; } // Set the effect based upon the KeyState. if ((e.get_KeyState() & 8 + 32) == 8 + 32 && (e.get_AllowedEffect() & DragDropEffects.Link) == DragDropEffects.Link) { // KeyState 8 + 32 = CTL + ALT // Link drag-and-drop effect. e.set_Effect(DragDropEffects.Link); } else { if ((e.get_KeyState() & 32) == 32 && (e.get_AllowedEffect() & DragDropEffects.Link) == DragDropEffects.Link) { // ALT KeyState for link. e.set_Effect(DragDropEffects.Link); } else { if ((e.get_KeyState() & 4) == 4 && (e.get_AllowedEffect() & DragDropEffects.Move) == DragDropEffects.Move) { // SHIFT KeyState for move. e.set_Effect(DragDropEffects.Move); } else { if ((e.get_KeyState() & 8) == 8 && (e.get_AllowedEffect() & DragDropEffects.Copy) == DragDropEffects.Copy) { // CTL KeyState for copy. e.set_Effect(DragDropEffects.Copy); } else { if ((e.get_AllowedEffect() & DragDropEffects.Move) == DragDropEffects.Move) { // By default, the drop action should be move, //if allowed. e.set_Effect(DragDropEffects.Move); } else { e.set_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.get_X(), e.get_Y()))); // Updates the label text. if (indexOfItemUnderMouseToDrop != ListBox.NoMatches) { dropLocationLabel.set_Text("Drops before item #" + (indexOfItemUnderMouseToDrop + 1)); } else { dropLocationLabel.set_Text("Drops at the end."); } } //listDragTarget_DragOver private void listDragTarget_DragDrop(Object sender, System.Windows.Forms.DragEventArgs e) { // Ensure that the list item index is contained in the data. if (e.get_Data().GetDataPresent(String.class.ToType())) { Object item = (Object)(e.get_Data().GetData( String.class.ToType())); // Perform drag-and-drop, depending upon the effect. if (e.get_Effect().Equals(DragDropEffects.Copy) || e.get_Effect().Equals(DragDropEffects.Move)) { // Insert the item. if (indexOfItemUnderMouseToDrop != ListBox.NoMatches) { listDragTarget.get_Items().Insert( indexOfItemUnderMouseToDrop, item); } else { listDragTarget.get_Items().Add(item); } } } // Reset the label text. dropLocationLabel.set_Text("None"); } //listDragTarget_DragDrop private void listDragSource_QueryContinueDrag(Object sender, System.Windows.Forms.QueryContinueDragEventArgs e) { // Cancel the drag if the mouse moves off the form. ListBox lb = (ListBox)sender; if (lb != null) { Form f = lb.FindForm(); // Cancel the drag if the mouse moves off the form. The // screenOffset takes into account any desktop bands // that may be at the top or left side of the screen. if (Control.get_MousePosition().get_X() - screenOffset.get_X() < f.get_DesktopBounds().get_Left() || Control.get_MousePosition().get_X() - screenOffset.get_X() > f.get_DesktopBounds().get_Right() || Control.get_MousePosition().get_Y() - screenOffset.get_Y() < f.get_DesktopBounds().get_Top() || Control.get_MousePosition().get_Y() - screenOffset.get_Y() > f.get_DesktopBounds().get_Bottom()) { e.set_Action(DragAction.Cancel); } } } //listDragSource_QueryContinueDrag private void listDragTarget_DragEnter(Object sender, System.Windows.Forms.DragEventArgs e) { // Reset the label text. dropLocationLabel.set_Text("None"); } //listDragTarget_DragEnter private void listDragTarget_DragLeave(Object sender, System.EventArgs e) { // Reset the label text. dropLocationLabel.set_Text("None"); } //listDragTarget_DragLeave } //Form1
DragDropEffects 列挙体を使用して、ドラッグ アンド ドロップ操作に関与しているコントロール間でデータをどのように渡すかを指定する方法を、次のコード例に示します。この例では、RichTextBox コントロールおよび Label コントロールを含むフォームを使用しており、Label コントロールに有効なファイル名の一覧が設定されている必要があります。ユーザーが RichTextBox コントロールにファイル名をドラッグすると、このコントロールの DragEnter イベントが発生します。イベント ハンドラ内では、DragEventArgs の Effect プロパティが DragDropEffects に初期化され、ファイル パスによって参照されているデータを RichTextBox コントロールにコピーすることを示します。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' Sets the AllowDrop property so that data can be dragged onto the control. RichTextBox1.AllowDrop = True ' Add code here to populate the ListBox1 with paths to text files. End Sub Private Sub RichTextBox1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles RichTextBox1.DragEnter ' If the data is text, copy the data to the RichTextBox control. If (e.Data.GetDataPresent("Text")) Then e.Effect = DragDropEffects.Copy End If End Sub Private Overloads Sub RichTextBox1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles RichTextBox1.DragDrop ' Loads the file into the control. RichTextBox1.LoadFile(e.Data.GetData("Text"), System.Windows.Forms.RichTextBoxStreamType.RichText) End Sub Private Sub ListBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown Dim Lb As ListBox Dim Pt As New Point(e.X, e.Y) Dim Index As Integer ' Determines which item was selected. Lb = sender Index = Lb.IndexFromPoint(Pt) ' Starts a drag-and-drop operation with that item. If Index >= 0 Then Lb.DoDragDrop(Lb.Items(Index), DragDropEffects.Link) End If End Sub
private void Form1_Load(object sender, EventArgs e) { // Sets the AllowDrop property so that data can be dragged onto the control. richTextBox1.AllowDrop = true; // Add code here to populate the ListBox1 with paths to text files. } private void listBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { // Determines which item was selected. ListBox lb =( (ListBox)sender); Point pt = new Point(e.X,e.Y); int index = lb.IndexFromPoint(pt); // Starts a drag-and-drop operation with that item. if(index>=0) { lb.DoDragDrop(lb.Items[index].ToString(), DragDropEffects.Link); } } private void richTextBox1_DragEnter(object sender, DragEventArgs e) { // If the data is text, copy the data to the RichTextBox control. if(e.Data.GetDataPresent("Text")) e.Effect = DragDropEffects.Copy; } private void richTextBox1_DragDrop(object sender, DragEventArgs e) { // Loads the file into the control. richTextBox1.LoadFile((String)e.Data.GetData("Text"), System.Windows.Forms.RichTextBoxStreamType.RichText); }
private: void Form1_Load( Object^ /*sender*/, EventArgs^ /*e*/ ) { // Sets the AllowDrop property so that data can be dragged onto the control. richTextBox1->AllowDrop = true; // Add code here to populate the ListBox1 with paths to text files. } void listBox1_MouseDown( Object^ sender, System::Windows::Forms::MouseEventArgs^ e ) { // Determines which item was selected. ListBox^ lb = (dynamic_cast<ListBox^>(sender)); Point pt = Point(e->X,e->Y); int index = lb->IndexFromPoint( pt ); // Starts a drag-and-drop operation with that item. if ( index >= 0 ) { lb->DoDragDrop( lb->Items[ index ], DragDropEffects::Link ); } } void richTextBox1_DragEnter( Object^ /*sender*/, DragEventArgs^ e ) { // If the data is text, copy the data to the RichTextBox control. if ( e->Data->GetDataPresent( "Text" ) ) e->Effect = DragDropEffects::Copy; } void richTextBox1_DragDrop( Object^ /*sender*/, DragEventArgs^ e ) { // Loads the file into the control. richTextBox1->LoadFile( dynamic_cast<String^>(e->Data->GetData( "Text" )), System::Windows::Forms::RichTextBoxStreamType::RichText ); }

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


Weblioに収録されているすべての辞書からControl.DoDragDrop メソッドを検索する場合は、下記のリンクをクリックしてください。

- Control.DoDragDrop メソッドのページへのリンク