ドラッグ&ドロップを実装するには?
今日、ツールの改良でドラッグ&ドロップを実装しよう*1と
ヘルプを見ながらやったのだが、うまく実装できなかった。
コントロールのプロパティにあるAllowDrop = Trueにして
イベントハンドラを実装するらしいのだが、
どうもDropEnter以降のイベントが走らない。
調べてみるとDropEnter*2時に続行するか止めるかを設定する必要があるようだ。
なんかウィンドウを閉じるときにCansel = Trueとかにすると
閉じなくなるのと同じだろう*3。
なるほど。もしかしたらデフォルトでとめているのかもしれない。
とりあえずGoogleで調べた一部を↓に貼っておく。
〜
実際にドラッグを開始するには、ドラッグされるアイテムのあるリストボックスのDoDragDropメソッドを呼び出します。ドロップを受け入れるリストボックスでは、リストボックス内にドラッグされた時にDragEnterイベントが発生しますので、ここでドロップを受け入れるか、受け入れるとしたらどのように受け入れるか(コピーか移動か等)を決定します。リストボックスにドロップされるとDragDropイベントが発生しますので、ここでドロップされたデータを取得し、リストボックスへデータを追加します。
〜(ソース一部抜粋) . . . 'ListBox2内にドラッグされた時 Private Sub ListBox2_DragEnter( _ ByVal sender As Object, ByVal e As DragEventArgs) 'ドラッグされているデータがstring型か調べ、 'そうであればドロップ効果をMoveにする If e.Data.GetDataPresent(GetType(String)) Then e.Effect = DragDropEffects.Move Else 'string型でなければ受け入れない e.Effect = DragDropEffects.None End If End Sub 'ListBox2にドロップされたとき Private Sub ListBox2_DragDrop( _ ByVal sender As Object, ByVal e As DragEventArgs) 'ドロップされたデータがstring型か調べる If e.Data.GetDataPresent(GetType(String)) Then Dim target As ListBox = CType(sender, ListBox) 'ドロップされたデータ(string型)を取得 Dim itemText As String = _ CStr(e.Data.GetData(GetType(String))) 'ドロップされたデータをリストボックスに追加する target.Items.Add(itemText) End If End Subhttp://dobon.net/vb/dotnet/control/draganddrop.html
他にも
『Windowsフォームアプリケーションにドラッグ&ドロップ機能を実装する』のもあった。
こっちは画像で実装している。
ソースを見る限り、今日*4ヘルプで見たことのあるメソッドが並んでいる。
意味不明で使ってなかったけどそれがダメだったのか*5
最後に
↑最強すぎます。フネさんの『ARO☆』が好き。