2012-02-27 28 views
16

ファイルをドラッグアンドドロップして、テキストボックスに完全なファイルパスが表示されるようにしたい。私はドラッグを使用してドラッグイベントをドロップしているが、私は彼らがイベントに参加していないことがわかります。ファイルをテキストボックスにドラッグアンドドロップする

private void sslCertField_DragDrop(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true) 
    { 
     e.Effect = DragDropEffects.All; 
    } 
} 

private void sslCertField_DragEnter(object sender, DragEventArgs e) 
{ 
    string file = (string)e.Data.GetData(DataFormats.FileDrop); 
    serverURLField.Text = file; 
} 

私が間違っていることを誰でも指摘できますか?

UPDATE:プログラムが昇格権限で実行するように設定されている場合は動作しません(ビスタ/ 7に勝つ)

+0

マークアップを表示できますか? – gaurawerma

答えて

17

あなたのテキストボックスのプロパティを確認してください - それはtrueに設定する必要があります。また だけではなく、stringDataFormats.FileDropの場合にstring[]にドラッグアンドドロップデータを変換:

string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); 
if(files != null && files.Length != 0) 
{ 
    serverURLField.Text = files[0]; 
} 

そして、私はあなたのドラッグイベントハンドラのコードを交換するべきだと思います - 通常あなたは、ドラッグ&ドロップがで可能であることをユーザに示しますDragEnterDragDropで実際の操作を実行してください。

+0

私はあなたが言ったことすべてをやった。私はallowdropをtrueに変更し、メソッドの内容を変更し、string []に変更しました。ただし、イベントはまだアクティブ化されていません。このフォームは親フォームの一部です。それはそれに影響を与えるだろうか?ただし、このテキストボックスは親のコントロールの一部ではありません – michelle

+2

実際にファイルをドラッグしようとすると、拒否アイコンが表示されます – michelle

+1

Win7/Vistaでアプリケーションが昇格(管理者)権限で実行されていますか?この場合、エクスプローラからのドラッグドロップは機能しません。 – max

4

は..あなたがあなたのソリューションを構築一度作成された.exeファイルを実行する...のVisual Studioから実行することができます:)

+1

Visual Studioでプロジェクトを実行すると違いがありますか?本当に ? Visual Studioはドラッグドロップ機能を無効にする必要がありますか? – PurpleXenon

+0

ええと何とかそれはデバッグからは機能しませんでしたが、直接作業しました – PersyJack

+0

私はコントロールを3回書き直してこれを理解しようとしました... :(感謝。 – Jeff

8

昇格した権限は、それを行うには何も持ってはならない希望をいけません。 Maxが回答したDragDropに加えてDragOverイベントを実装する必要もあります。これは、ドラッグアンドドロップのために追加されなければならないコードです:

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

+3

Windowsフォームアプリケーションでは、 :1) 'TextBox.AllowDrop = true;'を設定します。2)maxのコードを使って 'TextBox.DragDrop()'イベントを処理します。3)上記のJoaoのコードを使って 'TextBox.DragOver()'イベントも処理します。 3つの条件がすべて満たされたら、それはうまくいくはずです。私の場合、「昇格された特典」は必要ありませんでしたが、Visual Studioのショートカットを「管理者として実行する」ように変更することができます。 –

4

あなたがWPFを使用していて、それはまだ、あなたが

を使用する必要があります(私の場合だった)、ここでの回答では動作しない場合 PreviewDragEnterイベントで
e.Handled = true; 

herehereを説明するように(彼らは同じ記事だが、念の1つがダウンしました)。ここで

がそのソースから、コードスニペットです:

private void TextBox_PreviewDragEnter(object sender, DragEventArgs e) 
{ 
    e.Effects = DragDropEffects.Copy; 
    e.Handled = true; 
} 

private void TextBox_PreviewDrop(object sender, DragEventArgs e) 
{ 
    object text = e.Data.GetData(DataFormats.FileDrop); 
    TextBox tb = sender as TextBox; 
    if (tb != null) 
    { 
     tb.Text = string.Format("{0}", ((string[])text)[0]); 
    } 
} 
+0

PreviewDragEnterではありません。* PreviewDragOver *にする必要があります。そのイベントを使用して、私のためにTextBoxのために働いた。 –

1

あなたのVisual Studioは、管理者権限ドラッグの下で実行されているとドロップ機能をされている場合は動作しないようです。

=>管理者権限のないVisual Studioを実行すると、動作します

関連する問題