- ベストアンサー
ドラッグ&ドロップでListViewにファイルを追加する方法
- VisualStudio2008 C# で開発をしている場合、ListViewにエクスプローラーからファイルをドラッグ&ドロップする方法を調べているかもしれません。しかし、うまく動作しない場合があります。AllowDropプロパティの設定やDragEnterイベント、DragDropイベントの処理など、いくつかのポイントを確認する必要があります。
- まずは、ListViewのAllowDropプロパティをTrueに設定します。これにより、ListViewにドラッグ&ドロップが許可されます。次に、DragEnterイベントを実装し、e.EffectにDragDropEffects.Copyを設定します。これにより、ドラッグ中のエフェクトを指定することができます。最後に、DragDropイベントでドロップされたファイルの処理を行います。
- しかし、DragEnterイベントが発生しない場合もあります。これは、ドラッグされたものが外部からのものである場合、つまりエクスプローラーなどからのドラッグの場合に起こる問題です。この場合、別の設定が必要な場合があります。原因を調べるためには、他の可能な設定や処理漏れなども確認する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ん~ CS2008の環境が無いので ・・・ VirtualPC2007 + Vista Ultimate +VB2008EE といった環境で フォームにリストビューを貼り付け Form_Loadで ListView1.AllowDrop=True ListView1_DragEnterで e.Effect = DragDropEffects.Copy としただけのフォームで確認しましたが ドロップ禁止状態にはなりませんでした DragEnterイベントも発生しております ListViewにMouseDownイベントを追加して MessageBox.Show( listBox1.AllowDrop.ToString() ); などで本当に Trueに設定されているのかを確認してみましょう
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
DragEnterやDragDropに記述したコードを支障の無い範囲で公開してみましょう または他人が試して現象を確認できる最小限のコードを提示しましょう フレームワークは何を使うのか .net Framework 2.0/3.0/3.5 アプリケーションのタイプは何なのか WindowsForm/WebForm ListViewだから WindowsFormでしょうけど ・・・ AllowDrop=True; はプロパティで設定したのでしょうか? それともコードですか ListViewへドラッグした際にカーソルの変化はあるのでしょうか 黒丸に斜線のドロップ禁止のままなのでしょうか
お礼
ご返答ありがとうございます。 ご指摘の点を記述させていただきます。 // DragEnter private void ListView1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) { e.Effect = DragDropEffects.Copy; } } //DragDrop(ここの内容は特に意味はありません) private void ListView1_DragDrop(object sender, DragEventArgs e) { string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); } 【環境】 .net Framework3.5 WindowsForm AllowDropはプロパティでもコードでも同じでした。 カーソルの変化もなく、ご指摘のドロップ禁止状態のままです。 DragEnterの↓の部分を消してみても同じでした。 if (e.Data.GetDataPresent(DataFormats.FileDrop)) ちなみにOSはVistaを使っています。
お礼
解決しました。 コーディングなどには何の問題もなく、VisualStudioを「管理者として実行」で動かすとこのような状態になることが分かりました。 ソリューションファイルをダブルクリックして実行すると、ドロップできる状態になりました。 redfox63様 ご丁寧に回答いただき本当にありがとうございました。