• ベストアンサー

ドラッグ&ドロップについて

VB.NETについて質問です。 ListViewでドラッグ&ドロップするコーディングをしているのですが、 外からListViewへのドラッグ&ドロップ(データ取り込み)、ListViewから外へのドラッグ&ドロップ(データ出力)、ListView内でのドラッグ&ドロップ(アイテム並べ替え)を区別する方法を教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

質問を読んで思いついたレベルで書きます。 ドラッグの開始が自分のアプリか外部のアプリか、はMouseDownでフラグ立てるようにすれば分かります。 出力or移動の場合はおそらくMouseDownでDoDragDropを呼び出しているはずなので…。 ListViewのDragOver/DragDropでは、そのフラグで判断すれば外部からの取り込みか移動かの判断はつきます。 あるいは、ドラッグ開始時に独自のデータ型を含めることができれば、フラグなしでも判別できるでしょう。 問題は出力と移動の判別ですが、ドラッグの完了がコントロール内なら移動、コントロール外なら出力として判断する方法があります。 ただ、移動のドラッグ中はリアルタイムにリストを変動させる場合は厄介ですが・・・。 (思いついただけでコード検証はしていません)

関連するQ&A

  • フォームの外にドラッグ&ドロップ

    現在、VB2005においてアプリケーションを開発しています。 よく、リストボックスなどにドラッグ&ドロップしてパスを入力させる 方法がありますが、これの逆?をやりたいと思っております。 つまり、「すでにリストボックスなどに入力されたアイテムをフォームのそと にドラッグ&ドロップさせた場合にリストボックスからそのアイテムを さくじょする」という動作です。 フォームの外であることをどのように判断してよいかわからないため、 MouseUp,DragDropのイベントを受け取ることができません。 よろしくお願いします。

  • リストビュー内でのドラッグ&ドロップ

    MFCのCListView内の表示されるアイテムのドラッグ&ドロップを許容させるにはどうすればいいのでしょうか? 外からのドロップはMainFrameでキャッチできたのですが、CListView内でのドラッグ&ドロップがどうしてもできないので、お分かりになる方がいましたら、教えていただけないでしょうか?

  • ListViewで複数項目のドラッグ&ドロップ

    やりたいことは、エクスプローラのようなアイテムのドラッグ&ドロップです。 VB付属のリストビューをそのまま使うと、大きいアイコンで表示した時、複数選択してドラッグしても動くアイテムは、1つとなってしまいます。 複数アイテムを動かす方法を知っている方がいましたら教えてほしいのですが。 環境は、 Windows2000SP3 VisualBasic6SP5 です。

  • リストビューでのドラッグ&ドロップでの反転表示

    VC++にてエクスプローラもどきを作成していて、 ドラッグ&ドロップの操作を実装中です。 ListViewにて、OnLButtonDown内で マウスで押下されたフォルダイメージを CreateDragImageで作成しマウスカーソルを変更しました。 そして、ドラッグ中に、別フォルダへカーソルが移動した際、 そのフォルダを反転させるために、 OnDragOver内で、まず、全ての選択状態をクリアし、 for ( i = 0; i < list.GetItemCount(); i++ ){   item.iItem = i;   ListView_GetItem( list, &item2 );   item2.state = 0;   item2.stateMask = LVIS_SELECTED;   ListView_SetItem( list, &item ); } 対象となるフォルダのLV_ITEMを取得後に、 item.state = LVIS_SELECTED; item.stateMask = LVIS_SELECTED; ListView_SetItem( list, &item ); を行い選択状態に変更させました。 一応、ドラッグ&ドロップは、ある程度できているのですが、 描画が汚く、下記の2点について困っています。 1.ドラッグされたフォルダの反転表示が綺麗ではない(画像参照) 2.カーソル下に何のフォルダも無い場合は、   全ての選択状態をクリアだけでDragOverの処理を終了しているが、   前回選択状態にしたフォルダが反転表示(汚い状態で…)されたまま なにか、修正方法はありますでしょうか?

  • VB6でのドラッグ&ドロップについてです

    VB6でのことなんですが、リネームツールを作ろうと思って色々やってるのですが、うまくいきません。 フォルダをドラッグ&ドロップをして、 text1にフォルダの中のファイル名を表示して、text2にファイル名をコピーしてリネーム、というようなものを作りたいと考えています。 フォルダをドラッグ&ドロップして表示されるのが、そのフォルダのフルパスになってしまいます。 ドラッグ&ドロップしたフォルダの中のファイル名だけを表示する方法はどうすればいいのでしょうか? よろしくお願いします。

  • OLE ドラッグアンドドロップの代わりに

    いつもお世話になっています。 VBに、OLEドラッグアンドドロップというのがVBでありますよね。 これと同じようなことを、Commandなどをクリックしたとき発生させたいのですが、どうすればよいでしょう。 具体的に言うと、これで実現できるようなデータの受け渡しをしたいのです。ドラッグアンドドロップをさせるのは面倒なので、なんとかデータをボタンクリック一つで実現させたいのです。 クリップボード経由を使うという手もあるかもしれませんが、これを使うと、特殊なデータは渡せないようですし…… つまり、ドラッグアンドドロップで受け渡されるDataObjectを、クリックだけで別のフォームやリッチテキストボックスなどに受け渡すというか貼り付けられるようにしたいのです。 DataObjectと似たようなものがあればいいんですが、見つかりませんし…… どうすればいいのか全く分かりません。些細な情報でも良いので、どうか教えてください。 よろしくお願いします。(ちなみに、VB6です)

  • ドラッグ&ドロップからの取得

    VBで作ったソフトのアイコンにテキストファイルをドラッグ&ドロップするだけでVBの中のTextboxにテキストファイルの内容を表示させたいのですがその方法が分かりません…。 やはりWindowsのAPIとかいうのを使うのでしょうか? どなたか分かる方おられたら方法を教えて下さい。 お願いします。

  • ドラッグ&ドロップについて

    現在、Webブラウザ上でJavaScriptを使ったツリー表示をしており、 ツリー内のフォルダに対してドラッグ&ドロップを実装したいと思っています。 そこで質問なのですが、マウスの座標を取得して実装する様な方法では無く、ドラッグ・ドロップ対象のIDを取得して実装する方法はあるのでしょうか? ブラウザはIE6対応のみを想定しています。 ご存知でしたら、どうぞ宜しくお願いします。

  • ドラッグアンドドロップでファイルを読み込む方法を教えて下さい。

    一応いま手元にあるのはVB.NET2003なのですが、 これを使って複数のファイルから指定した行の内容をコピーして出力するプログラムを作りたいと考えています。 そのためには 1.ファイルをドラッグアンドドロップしてファイルの内容を読み込む 2.読み込んだ内容を順番に出力する機能が必要になります。 それでドラッグアンドドロップによりファイルを読み込む記述を探しているのですが、 http://www.atmarkit.co.jp/fdotnet/dotnettips/676dragdrop/dragdrop.html ここにあるように、 1.フォームのAllowDropプロパティをTrueに設定する 2.フォームのDragEnterイベント・ハンドラを記述する 3.フォームのDragDropイベント・ハンドラを記述する ということを順番に行えば良いわけですが、1番はもちろん分かりますが、2番と3番がどうして良いのか分かりません。 本屋で一通りVBの本を見てみたのですが、どの本にもドラッグアンドドロップについて書かれてある本はありませんでした。 検索などすると、確かにDragEnter、DragDropに関する記述は見つかるのですが、難しくてどうしても理解出来ません。 どなたか易しく教えて頂けないでしょうか? よろしくお願い致します。

  • ドロップ&ドラッグが出来なくなる

    Windows10でESETを使用しています。 使用しているとドロップ&ドラッグが出来なくなる現象がおきます。再起動すると治るのですがどうも面倒です。 お絵かきソフトを使用中に起こるためソフトの不具合かと思っていましたがデスクトップ上でも出来ませんでした。 試しにESETを停止したところドロップ&ドラッグができるようになりました。 しかしセキュリティソフトを停止したままにするのは不安ですのでどなたか解消方法をご存知でしょうか? ご教示いただけますと幸いです。 ※OKWAVEより補足:「ESETセキュリティ ソフトウェア シリーズ」についての質問です。

専門家に質問してみよう