• ベストアンサー

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

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

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

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

QueryContinueDragイベントで対応ってことになりそうですよ フォームレベルにどのアイテムをDragしたのかを保存しておく変数を用意します Dim nItem as integer Drag開始時に nItem = ListBox1.SelectedIndex といった感じで... QueryContinueDragイベントで if e.Action = DragAction.Drop then Dim pt As Point = ListBox1.PointToClient(ListBox1.MousePosition) ' ListBox1以外でドロップされた場合 ' フォーム以外ならListBox1をForm1などに置き換えてください if ListBox1.ClientRectangle.Contains(pt)=False then ListBox1.Items.RemoveAt( nItem ) end if end if といった具合でしょう ...

ronaldo9
質問者

お礼

上記の方法でできました。 助かりました。ありがとうございます。

その他の回答 (1)

  • unamana19
  • ベストアンサー率62% (56/89)
回答No.1

テキストボックスの内容をドラッグドロップしてコピーするには Private Sub TextBox1_MouseDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) _ Handles TextBox1.MouseDown TextBox1.DoDragDrop(TextBox1.Text, DragDropEffects.Copy) End Sub こんな感じになります。 メモ帳などに入力されたテキストがドラッグドロップできます。

関連するQ&A

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

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

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

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

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

    初歩的なことを教えて下さい。 VB6を使用してドラッグ&ドロップの処理を作成したいのですが、どのように行ったら良いのか分かりません。 内容は、フォーム上にある一つのアイコン(ピクチャーボックスなど)を、同フォームの別の領域に、ドラッグ&ドロップで追加させて表示させる処理となります。また、追加されたアイコンをそれぞれコード上で判別もできるのでしょうか? 宜しくお願いします。

  • 【C#】ドラッグ&ドロップについて

    前にも質問したのですが、行き詰まったのでもう一度質問します。 (1)リッチテキストボックスにテキストファイルをドラッグ&ドロップする。 (2)そのテキストファイルの内容をリッチテキストボックスに表示する。 というプログラムを作っています。 このうち(1)についてはほぼ解決したのですが、(2)についてはさっぱりです。(つまり、DragDropイベントの部分がわかりません。) どなたか教えて下さい。

  • VC++でドラッグドロップ

    いつもお世話になっております。 今回はドラッグドロップについてお聞きしたいことがあります。 ダイアログに読取専用エディットボックスとリストボックスをつけて フォルダをドロップするとエディットにはフォルダのフルパス、 リストにはフォルダ内のファイルが列挙されるというソフトを 作っております。 現状、リストへフォルダをドロップした場合は以上の動作をしますが エディットへドロップしても何の反応も起きません。 今回はエディットとリストどちらにドロップしても同様の動作をしたく、 ResourceViewで両方ドラッグドロップ許可にしていますが、 リストのほうはドロップするとアイコンには+がでて、 ドロップ可能のようになっていますが実際にはWM_DROPFILESすら 捕まえることができません。 読み取り専用がよくない等いろいろ試しては見ましたが できませんでした。 リストのほうをドロップ不可(エディットのほうのみ可能)にした場合も 何もおきなかったのですが、そもそもエディットボックスではドロップは 不可能なのでしょうか? 以上の点をご教授願いたいです。 よろしくお願いします。 開発環境は VC++6.0 Professional SP2 OSは WindowsXP です。

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

    閲覧して頂きありがとうございます。 現在、WindowsXPでvc++6.0のMFC(ダイアログベース)を利用してダイアログを作り エディットボックスに入力されたファイルパスを利用して指定のファイルを 開く簡単なアプリを作ろうとしています。 そこでダイアログのエディットボックスの部分にファイルをドラッグ&ドロップすると エディットボックスにドロップされたファイルのパスを表示させようとしていますが、中々できません。 状況としては、グループボックスの中にエディットボックスを作成し、 グループボックスを右クリック→プロパティ→ドラッグドロップを許可 をすることによりグループボックスにドロップの許可を与えることはできていますが ドロップのイベントを拾うことができておりません。 ※参考サイトなどをみると「WM_DROPFILES」というハンドラがあるみたいなのですが  どこにも見当たらないです。。。 何か不明な点などあれば補足させて頂きますので、よろしくお願いします。

  • 【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]; } }

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

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

  • コントロールのドラック&ドロップ

    コンニチワ VBでフォームに配置したコントロールを ドラック可能にして フォーム上でドラック&ドロップを 検出してドラック前の位置から ドロップ後の位置にコントロールを 移動させたいのですが どうしてもずれたりして 上手く配置されません どなたか同じようなことをやったことがある方 ベストなやり方 わかる方教えて下さい よろしくお願いします

  • 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' : 配列の初期化には中かっこ ({}) が必要です。 このエラーの解決方法か、ドラッグドロップしたファイルのパスを取得する方法をご教授頂ければ幸いでございます。 よろしくお願いいたします。

専門家に質問してみよう