サンプルでは2つのリストボックスを用意し、あらかじめリスト項目が
設定されているリストボックスから他方のリストボックスへ項目をコピー
します。ドラッグ&ドロップにはDataObjectと関連するイベント処理が
重要です。併せてヘルプもご確認ください。
(前提)ListBox2個(ListBox1,ListBox2)
※下記コードをそのまま貼り付けて実行したときにコンパイルエラーが
発生する場合、必要なイベントプロシージャの中身だけをコピーする
用にして下さい。
'○ユーザフォーム初期化イベント
Private Sub UserForm_Initialize()
ListBox1.List = _
Array("Excel", "Access", "PPT", "Outlook")
End Sub
'○リストボックス1のマウス移動時イベント(ドラッグ開始)
Private Sub ListBox1_MouseMove _
(ByVal Button As Integer, ByVal Shift As Integer, _
ByVal X As Single, ByVal Y As Single)
Dim D As DataObject
'マウス左ボタンのドラッグ時に対応
If Button <> 1 Then Exit Sub
'データオブジェクトに現在の選択地を格納
Set D = New DataObject
D.SetText ListBox1.Value
D.StartDrag 'ドラッグ開始
End Sub
'○リストボックス2へのドラッグ(In)
Private Sub ListBox2_BeforeDragOver _
(ByVal Cancel As MSForms.ReturnBoolean, _
ByVal Data As MSForms.DataObject, _
ByVal X As Single, ByVal Y As Single, _
ByVal DragState As MSForms.fmDragState, _
ByVal Effect As MSForms.ReturnEffect, _
ByVal Shift As Integer)
'二番目のリストボックスにマウスが入った時のイベント
'Cancel=TrueでDrag&Drop継続
Cancel = True
End Sub
'○リストボックス2へのドロップ
Private Sub ListBox2_BeforeDropOrPaste _
(ByVal Cancel As MSForms.ReturnBoolean, _
ByVal Action As MSForms.fmAction, _
ByVal Data As MSForms.DataObject, ByVal X As Single, _
ByVal Y As Single, ByVal Effect As MSForms.ReturnEffect, _
ByVal Shift As Integer)
'ドラッグ時のみドラッグされたデータをリスト項目に追加
If Action = fmActionDragDrop Then ListBox2.AddItem Data.GetText
'DataObjectのデータクリア
Data.Clear
End Sub
|