DOBON.NET DOBON.NETプログラミング掲示板過去ログ

listBoxでエクスプローラーのドラッグ&ドロップの実現方法

環境/言語:[WindowsXP C# .NET Framework 1.1]
分類:[.NET]

こんにちは

エクスプローラーのドラッグ&ドロップ機能をlistBoxで実現したいのですが、
うまくいきません。
listBoxのItemにファイルパスを表示させ、それをドラッグ&ドロップ時に、
string型でファイルの絶対パスを持たせるようにしてみたのですが、それではだめでした。
googleで検索してもぜんぜん出てこないので、だれかわかる方いたら教えてください。
■No3108に返信(brnさんの記事)
> こんにちは
>
> エクスプローラーのドラッグ&ドロップ機能をlistBoxで実現したいのですが、
> うまくいきません。
> listBoxのItemにファイルパスを表示させ、それをドラッグ&ドロップ時に、
> string型でファイルの絶対パスを持たせるようにしてみたのですが、それではだめでした。
> googleで検索してもぜんぜん出てこないので、だれかわかる方いたら教えてください。
>
>

何を言っているのかわかりません。
もうすこし、わかりやすく、詳しくお願いします。
返信ありがとうございます。

解りにくくてすいません(T T

詳しく書きますと、
c:\test.txtというファイルがあるとします。
そのファイルの絶対パスをリストボックスのアイテムとして持たせます。
そのアイテムをドラッグして、メモ帳に持って行った時に、そのファイルをメモ帳で開きたいのです。

プログラムとしては、

1、listBoxのItemにファイルパスを表示させる
 string fileName="c:\test.txt";
 listBox1.Items.Add(fileName);

2、listBoxでMouseDown時にドラッグ開始
private void listBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e){
if (e.Button == MouseButtons.Left)
{
//ドラッグの準備
ListBox lbx = (ListBox) sender;
//ドラッグするアイテムのインデックスを取得する
int itemIndex = lbx.IndexFromPoint(e.X, e.Y);
if (itemIndex < 0) return;
//ドラッグするアイテムの内容を取得する
string itemText = (string) lbx.Items[itemIndex];

//ドラッグ&ドロップ処理を開始する
DragDropEffects dde = lbx.DoDragDrop(itemText, DragDropEffects.Link);

//ドロップ効果がMoveの時はもとのアイテムを削除する
if (dde == DragDropEffects.Move)
lbx.Items.RemoveAt(itemIndex);

}
}

このプログラムですと、ドラッグ時にファイル名を文字列で持たせているのですが、文字列ではメモ帳のアイコンに持っていっても禁止アイコンになって、
ファイルを開けませんでした。
これを開くには、DoDragDrop時にどういうデータを持たせればいいんでしょうか?
> このプログラムですと、ドラッグ時にファイル名を文字列で持たせているのですが、文字列ではメモ帳のアイコンに持っていっても禁止アイコンになって、
> ファイルを開けませんでした。
> これを開くには、DoDragDrop時にどういうデータを持たせればいいんでしょうか?

あまり詳しくはないですが、Shell IDList Array とかですかねぇ。
■No3108に返信(brnさんの記事)
> エクスプローラーのドラッグ&ドロップ機能をlistBoxで実現したいのですが、
> うまくいきません。
> listBoxのItemにファイルパスを表示させ、それをドラッグ&ドロップ時に、
> string型でファイルの絶対パスを持たせるようにしてみたのですが、それではだめでした。

エクスプローラへのファイルのドロップということであれば、以前掲示板で同じ内容の投稿がありました。

・VB.Netで作成したアプリからエクスプローラへのドラッグ&ドロップの方法
http://dobon.net/vb/bbs/log3-4/2064.html
> ・VB.Netで作成したアプリからエクスプローラへのドラッグ&ドロップの方法
> http://dobon.net/vb/bbs/log3-4/2064.html
あ、ほんとうだ。えらく簡単にできるんですね。(.. )φ
おかげさまで解決できました(^^)

古い過去ログの検索が別になってるのを見落としてました。

管理人さんのリンクの内容でできました。
初めはファイルへのパスの文字列が配列になってるのに気づきませんでしたが、
一度VB.NETで作ってみたら気づきました。

みなさん、本当にありがとうございましたm(_ _)m
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板