none
デスクトップにドラッグしても、ポインタがドラッグ可能(+)になりません。 RRS feed

  • 質問

  • いつもお世話になります。
    VisualC#2010、WindowsXPでの動作について質問があります。
    WPFファイラーを作っています。
    ファイル名を表示しています。
    このファイル名をドラッグしたときに、ファイルをドラッグするにはどうしたらよいでしょう?
    filenameTextBoxを配置して、そこにファイル名を表示しています。
    これをドラッグアウトして、デスクトップとかに移動したいです。

    private void filenameTextBox_MouseDown(object sender, MouseButtonEventArgs e){
     DataObject data = new DataObject();
     data.SetData(DataFormats.FileDrop, new string() {fileName});
     DragDrop.DoDragDrop(filenameTextBox, data, DragDropEffects.Copy);
    }

    としたところ、デスクトップにドラッグしても、ポインタがドラッグ可能(+)になりません。
    どこが違っているのか、ご指摘いただければと存じます。

    2011年1月4日 6:30

回答

  • ただ、じっさいには上記のコードでいまいち動作しないでいます。
    ドラッグ先がWebブラウザなどの場合には読み込んでいるので、かならずしも動いていないわけでもないようなのですが…。

    「いまいち」と表現されても伝わりません。
    何を達成できればゴールなんですか?
    そして現状はどうなのでしょうか?

    私の手元は Windows 7 (x86) ですが、PreviewMouseDown イベントに書くことでデスクトップにもドロップ可能なようです。
    もちろん、fileName は実在するファイルパス(例:@"f:\temp\test.html")で設定しています。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 山本春海 2011年1月31日 6:25
    2011年1月4日 10:24
    モデレータ

すべての返信

  • まず、MouseDown イベントに来ているかどうかを確かめましたか?
    ブレークポイントなどを使うとわかるかと思います。
    (TextBox 自体が文字列のドラッグ&ドロップを実装しているため、そちらが優先される)

    PreviewMouseDown イベントを使えばそれらしい動作はできましたが、反面、使いづらいと感じています。
    理由はテキストボックス内のカーソル移動でクリックが使えない、範囲選択ができないといった弊害を生むからです。
    ユーザーインターフェースとして使いやすいか、考え直すことを提案させてください。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    2011年1月4日 8:53
    モデレータ
  • Azuleanさん、さっそくありがとうございます。
    おっしゃるとおりでPreviewMouseDownイベントで、イベントが来ていることは確認できています。
    ただ、じっさいには上記のコードでいまいち動作しないでいます。
    ドラッグ先がWebブラウザなどの場合には読み込んでいるので、かならずしも動いていないわけでもないようなのですが…。

    また、別の問題として、おっしゃるように、ユーザーインターフェースの問題はないでもないですが(それはよくわかっています)、それは別の問題なので、まずは動く方法について教えてください。

    テキストボックス内の選択やクリックを使えないなどの問題があることは理解していますが、第一にこのままソフトをリリースするわけではなく当面テストであること、当然リリース時にこれではだめなので作り直すこと、ただ、現時点で自分で使う分には、ファイル名を変更する頻度は移動する頻度と比較して、きわめて少ないので、とりあえずこの状態でテストしながら、インターフェースについては別途考える、ということです。

    2011年1月4日 9:12
  • ただ、じっさいには上記のコードでいまいち動作しないでいます。
    ドラッグ先がWebブラウザなどの場合には読み込んでいるので、かならずしも動いていないわけでもないようなのですが…。

    「いまいち」と表現されても伝わりません。
    何を達成できればゴールなんですか?
    そして現状はどうなのでしょうか?

    私の手元は Windows 7 (x86) ですが、PreviewMouseDown イベントに書くことでデスクトップにもドロップ可能なようです。
    もちろん、fileName は実在するファイルパス(例:@"f:\temp\test.html")で設定しています。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 山本春海 2011年1月31日 6:25
    2011年1月4日 10:24
    モデレータ