• 締切済み

ドロップ機能の実装方法

毎度お世話になっております。 別アプリケーションのファイル(エクスプローラから)をドラッグし、 現在作成中のアプリケーションにドロップしファイル名、ディレクトリ、長さ(そのファイルと言うのが音楽ファイルのため)を取得しようと思っているのですが、 重要なドロップの時の処理がうまくいきません・・・ っと言うのもデバッグで実行中にファイルを渡そうとしてみると道路標識の「車両通行止め」のマークみたいなのが出てしまい出来ません。 現在の状況としては listView->DragDrop += gcnew System::Windows::Forms::DragEventHandler(this, &myView::listView_DragDrop); で受け取ろうとしており、 また、プロパティで listView->AllowDrop = true; としているため出来そうだと思っていたのですが八方塞な感じです・・・ 初心者のため纏まりの無い質問文で大変申し訳ありませんが、 どうかご助力宜しくお願い致します。 OS:Windows XP 環境:Visual C++ 2008 EE

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

DragEnterイベントも処理しないといけません 引数e.Dataで希望するデータがドラッグされているか確認してEffectを適切な値に変更しましょう Effectを変更しないと丸に斜め線のままだと思います

galdo530
質問者

お礼

そうなんですか! 勉強になりました。。。 試してみます^^ ありがとうございます。

関連するQ&A

  • DragEnterイベントについて(VS2008、ドラッグ&ドロップ)

    VisualStudio2008 C# で開発をしています。 ListViewにエクスプローラーからファイルをドラッグ&ドロップしようとしているのですが、うまくできません。 いろいろと調べて下記の3点を抑えればできるのかと思っていますが、思ったように動きません。 ListViewのAllowDrop=True; DragEnterイベントでe.Effect = DragDropEffects.Copy; DragDropイベントでDropした後の処理 きちんと記述しているつもりですが、DragEnterイベントが発生しません。 ちなみに、同じListViewの要素をドラッグ&ドロップするとDragEnterイベントは発生するので、あくまで外部(エクスプローラーなど)からドラッグされたものが受け付けないようです。 何が原因なのでしょうか? ほかに設定などあるのでしょうか?

  • C#でドラッグ&ドロップが機能しない。

    使用OSはWindows8で 開発環境はVisualStudio2012 (.NET Framework4.5)です。 ListBox1にドラッグ&ドロップでファイル名を表示する機能を追加したいと思い、以下のようなコードを記述しました。また、ListBox1のイベントととしてListBox1ListBox1_DragEnterとListBox1_DragDropを関連づけました。 この状態でビルドして動作を確認してみると、問題なく動作しました しかし、debugフォルダ内のEXEファイルを直接起動するとドラッグ&ドロップ不可のマークが出てしまいます。 なにが問題が問題なのか分からず困っています。ご回答お願いします。 private void Form1_Load(object sender, EventArgs e) {   this.AllowDrop = true;   ListBox1.AllowDrop = true; } private void ListBox1_DragEnter(object sender,System.Windows.Forms.DragEventArgs e) {   e.Effect = DragDropEffects.Copy; } private void ListBox1_DragDrop(object sender,System.Windows.Forms.DragEventArgs e) {   string[] fileName =(string[])e.Data.GetData(DataFormats.FileDrop, false);   ListBox1.Items.AddRange(fileName); }

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

    一応いま手元にあるのは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に関する記述は見つかるのですが、難しくてどうしても理解出来ません。 どなたか易しく教えて頂けないでしょうか? よろしくお願い致します。

  • ドラッグドロップ(AllowDrop)について

    Form1にドラッグドロップ機能を導入しようと思い AllowDropプロパティをTrueにしてDragDropイベントとDragEnterイベントを記述しました。 実際にデバックしてみるとうまく機能して安心したのですが 後で、bin/debug/AAA.exeを直接クリックしてみるとなぜか機能しません。 MyBase.LoadイベントにMyBase.AllowDrop=Trueと記述してみたいのですがダメでした。 何か設定が間違ってるのでしょうか? ぜひご回答お願いします。 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load   MyBase.AllowDrop = True End Sub Private Sub drag_drop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop   Dim list As String() = CType(e.Data.GetData(DataFormats.FileDrop, False), String())   For Each a In list      MsgBox(a)   Next End Sub Private Sub drag_enter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragEnter   e.Effect = DragDropEffects.Copy End Sub

  • VC++2005 windowsフォームアプリでドラッグ&ドロップを実現する方法

    お世話になっております。 表題についていろいろ調べたのですがエラーの解決方法が見つからないため、質問させてください。 環境はVC++2005 CLD windowsフォームアプリケーション です。 貼り付けたリストボックスにtxtファイルをドラッグドロップして中身を取り出したいのですが、dragdrop関数内で、ファイルのパスを抜き出す部分でエラーが解決できません。 環境に合わせて下記のようなdragdrop関数を作成中です。 System::Void Form1::commandListBox_DragDrop(System::Object^ sender, System::Windows::Forms::DragEventArgs^ e) { if(e ->Data ->GetDataPresent(DataFormats::FileDrop)){ // ファイルドロップのとき std::string files[] = (std::string[])(e->Data->GetData(DataFormats::FileDrop)); } } 最後の行はMSDNなどで書かれていた string[] files = (string[])(e.Data.GetData(DataFormats.FileDrop)); となっている部分を参考にしているつもりですが、この部分で下記のエラーがでます。 1>.\mySrc\tab0.cpp(45) : error C2440: '型キャスト' : 'System::Object ^' から 'std::string []' に変換できません。 1> 配列型への変換はありませんが、参照またはポインタから配列への変換があります。 1>.\mySrc\tab0.cpp(45) : error C2075: 'files' : 配列の初期化には中かっこ ({}) が必要です。 このエラーの解決方法か、ドラッグドロップしたファイルのパスを取得する方法をご教授頂ければ幸いでございます。 よろしくお願いいたします。

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

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

  • ドラッグ&ドロップの対象をフォルダに限定したい

    こんばんは。 テキストボックスにドラッグ&ドロップされたフォルダのパスを取得させたいのですがドラッグの対象をフォルダに限定させたい、もしくはファイルがドラッグ&ドロップされたらそのファイルのカレントディレクトリまでのパスを取得させたいのですが、下記のコードでは取得までは出来るのですがファイルがきた場合にファイルまでのパスが取得されてしまいまいます。 よろしくお願いします。 Dim ddpath As String Private Sub TxtPath_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles TxtPath.DragEnter If e.Data.GetDataPresent(DataFormats.FileDrop) Then e.Effect = DragDropEffects.Copy Else e.Effect = DragDropEffects.None End If End Sub Private Sub TxtPath_DragDrop(ByVal sender As Object, ByVal e As _System.Windows.Forms.DragEventArgs) Handles TxtPath.DragDrop ddpath = e.Data.GetData(DataFormats.FileDrop)(0) If Dir(ddpath, FileAttribute.Directory) <> "" Then TxtPath.Text = ddpath End If End Sub

  • [VB] ブラウザからの D&D について

    こんにちは。VisualBasic2008で画像を扱うWindowsアプリケーションを開発しているのですが、 IE や FireFox などのブラウザでWebページなどを表示した際、 そのWebページに含まれる画像をフォームにドラッグ&ドロップすることによって 取得することがうまくいきません。 'Me.AllowDrop=True 'PictureAdd(Image as Bitmap) は画像を追加するものです。 Private Sub Form1_DragEnter(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragEnter If e.Data.GetDataPresent(GetType(Bitmap)) Then e.Effect = DragDropEffects.Copy End If End Sub Private Sub Form1_DragDrop(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.DragEventArgs) Handles MyBase.DragDrop, Panel1.DragDrop Try PictureAdd(e.Data.GetData(GetType(Bitmap))) Catch ex As Exception MessageShow("エラー: " & ex.Message) End Try End Sub

  • 【C# 2010】 テキストへのドラック&ドロップ

    VisualStudio C#2010 Express の環境で、テキストボックスにエクスプローラからフォルダを指定(複数)して、ドラック&ドロップすると、そのフォルダのフルパスをテキストボックスへ表示させるアプリケーションを作成しております。 調べながら作成し、フォルダのフルパスをテキストボックスへ表示させられるようになったのですが、わからない点として、複数のフォルダを指定しても、テキストボックスに表示されるのは1フォルダ分のフルパスだけになってしまうという点です。 テキストボックス側のプロパティで、複数行で表示させる設定(Multiline)は有効(True)にしてありますし、ユーザーがドラックしたデータを受け入れるかの設定(AllDrop)も有効にしてあります。 その他、気づいた点として、☆ ドロップイベントの配列(pass)には指定したフォルダ分のフルパスが格納されていますが、textbox1.Text = pass[i] の部分で全てのフルパスがテキストに表示されません。 原因を考えましたが、どうしてもわからなかったので、どなたかお分かりになられる方がいらっしゃい ましたら、ご教授のほどお願いできますでしょうか? 何卒、よろしくお願いいたします。 ----------------------------------------------------------------------------- public Form1() { InitializeComponent(); this.textBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.textBox1_DragDrop); this.textBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.textBox1_DragEnter); } // ☆ ドラッグイベント private void textBox1_DragEnter(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.All; else e.Effect = DragDropEffects.None; } // ☆ ドロップイベント private void textBox1_DragDrop(object sender, DragEventArgs e) { string[] pass = (string[])e.Data.GetData(DataFormats.FileDrop, false); int i; for (i = 0; i < pass.Length; i++) { textBox1.Text = pass[i]; } }

  • ファイルをドラッグドロップでTextBooxにファイル名を出したい

    下記のサンプルコードをWEBサイトで見つけたので ListBox1というところをTextBox1と直して テキストボックスにファイルのフルパスが出るように したかったのですが、Listbox1だと正常なのですが、 TextBox1に変更すると動作しなくなってしまいます。 最後の部分の ListBox1.Items.AddRange(e.Data.GetData(DataFormats.FileDrop))は TextBox1.Text=e.Data.GetData(DataFormats.FileDrop) に変更してあります。 正常に動作するにはどこを直したらよいか教えて頂きたいです。 宜しくお願いします。m(__)m --------------------------------------------------- Private Sub ListBox1_DragEnter(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles ListBox1.DragEnter '関連連づけの確認をしています。 'この場合、ドラッグアンドドロップの形式であるかどうか? If e.Data.GetDataPresent(DataFormats.FileDrop) Then 'ドロップ効果を取得 e.Effect = DragDropEffects.Copy Else 'ドロップ効果を破棄 e.Effect = DragDropEffects.None End If End Sub Private Sub ListBox1_DragDrop(ByVal sender As Object, _ ByVal e As System.Windows.Forms.DragEventArgs) _ Handles ListBox1.DragDrop 'DragEnterイベントで、取得した情報を追加 ListBox1.Items.AddRange(e.Data.GetData(DataFormats.FileDrop)) End Sub

専門家に質問してみよう