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

ツリービューを使ったドラッグ&ドロップがうまくいかないんです(>_<)

環境/言語:[.NET Framework1.1 VSC#2003 Windows2000SP4]
分類:[.NET]

はじめまして。ツリービューに列挙されたアイテム(エクスプローラー風のツリービューでファイルまで展開しています)をドラッグして同一フォーム上のテキストボックスにドロップし内容を表示しようとしています。
Windowsのエクスプローラからファイルをテキストボックス内にドロップしたときは正常に処理されるんですがツリービューからがうまくいきません。
どなたかお知恵を拝借出来ないでしょうか?ソースは以下のようになっています。
よろしくお願いします。

*テキストボックス(自作のツリービュー以外からのドロップは問題ありません)
private void textBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
textBox1.Text = String.Empty;

string[] File_Name = (string[])e.Data.GetData(DataFormats.FileDrop);

FileInfo F = new FileInfo(File_Name[0].ToString());
StreamReader SR = null;

if(F.Exists == true)
{
try
{
FileStream FS = new FileStream(F.FullName,FileMode.Open,FileAccess.Read);
SR = new StreamReader(FS,Encoding.Default);
textBox1.Text = SR.ReadToEnd();
}
catch(Exception E)
{
MessageBox.Show(E.Message,"エラー",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
finally
{
if(SR != null)
{
SR.Close();
}
}
}
}

private void textBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
if(e.Data.GetDataPresent(DataFormats.FileDrop)==true)
{
e.Effect = DragDropEffects.Copy;
}
else
{
e.Effect = DragDropEffects.None;
}
}

*ツリービュー
private void treeView1_ItemDrag(object sender, System.Windows.Forms.ItemDragEventArgs e)
{
TreeNode itm = (TreeNode)e.Item;
try
{
FileInfo F = new FileInfo(itm.FullPath);
if(F.Exists == true)
{
try
{
DataObject Obj = new DataObject(DataFormats.FileDrop,F.FullName);
treeView1.DoDragDrop(Obj,DragDropEffects.Copy);
}
catch(Exception Ex)
{
MessageBox.Show(Ex.Message,"エラー",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}
catch(Exception Ex)
{
MessageBox.Show(Ex.Message,"エラー",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
■No5125に返信(HOGEさんの記事)
> うまくいきません。
具体的に現象を書きましょう。どのような例外が発生するか、など。

おそらく、TextBox側の
> string[] File_Name = (string[])e.Data.GetData(DataFormats.FileDrop);
で、例外InvalidCastExceptionが発生しているのではないでしょうか?
TextBox側では上記のようにstringの配列が渡されることを想定していますが、
TreeView側では
> DataObject Obj = new DataObject(DataFormats.FileDrop,F.FullName);
のようにstringを渡そうとしているので。
NowhereMan 付き人さん、こんにちわ。


> private void textBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
> {
> if(e.Data.GetDataPresent(DataFormats.FileDrop)==true)
> {
> e.Effect = DragDropEffects.Copy;
> }
> else
> {
> e.Effect = DragDropEffects.None;
> }
> }
>
ここが悪かったみたいです。FileDropに一致していなかったので
ここで受け取りが拒否されていてドロップしたら何も無い状態になってたみたいです。
有難うございました。
解決済み!

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