投稿日 | : 2005/12/09(Fri) 11:31 |
投稿者 | : ダンボ |
URL | : |
タイトル | : DataObjectを使ったDrag&Drop |
ども。Excel VBAからOutlook2000 VBAに手を広げ始めたダンボです。
外部仕様:lstALL,lstTO,lstCCと3つのリストボックスがあり、
・lstALLからlstTO又はlstCCにドラッグ&ドロップした場合:lstTO又はlstCCにlstALLの該当データ
を
複写する。
・lstTO又はlstCCからlstALLにドラッグ&ドロップした場合:lstTO又はlstCCの該当データを削除す
る。
・lstTOからlstCCにドラッグ&ドロップした場合:lstTOの該当データをlstCCに移動する。
ということを考えています。そのうちlstBCCも拡張するかもしれません。
DataObjectの利用が初めてなので教えていただきたいのですが、
1.With New MSForms.DataObjectでどんどんインスタンスを作って行っては、やはりまずいのでしょう
ね?
Drop側でSet Data = Nothingを実行するべき?
2.「ドラッグ元がどこか」を知る方法は?
DataObjectのプロパティってひとつも無い。
DataObjectのメソッドはClear/Getformat/GetfromClipboad/GetText/PutInClipboard/SetText/
StartDrag
とすると、lstAll_Clickで .SteText lstAll.Nameとでもして名前を伝えるようにするのかな?
できれば、lstAllというコントロールそのものを渡したいところ。
(作りかけのコード)
Private Sub lstAll_Click()
With New MSForms.DataObject
.StartDrag
End With
End Sub
Private Sub lstCC_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.Value = True
Effect.Value = fmDropEffectCopyOrMove
End Sub
Private Sub lstCC_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)
lstCC.AddItem lstAll.Value
Effect.Value = fmDropEffectMove
End Sub