VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -