8

Windows エクスプローラーから Windows フォーム アプリケーションにファイルをドラッグする際に問題が発生しています。

テキストをドラッグすると問題なく動作しますが、何らかの理由でファイルが認識されません。ここに私のテストコードがあります:

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_DragDrop(object sender, DragEventArgs e)
        {

        }

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

AllowDrop は Form1 で true に設定されており、前述したように、実際のファイルではなくフォームにテキストをドラッグすると機能します。

私は Vista 64 ビットを使用しています ... それが問題の一部であるかどうかはわかりません。

4

4 に答える 4

20

この問題は、Vista のUACに起因します。DevStudio は管理者として実行されていますが、エクスプローラーは通常のユーザーとして実行されています。エクスプローラーからファイルをドラッグして、DevStudio でホストされているアプリケーションにドロップすると、特権のないユーザーが特権ユーザーと通信しようとするのと同じことになります。それは許可されていません。

これは、デバッガーの外部でアプリを実行すると表示されない可能性があります。そこで管理者として実行しない限り(またはVistaがインストーラー/セットアップアプリであることを自動検出する場合)。

少なくともテストのために、 admin として Explorer を実行することもできます。または、UAC を無効にします (これはお勧めしません。デプロイ時ではなく、開発時にこれらの問題を把握したいからです!)

于 2008-11-13T20:19:46.727 に答える
0

アルルが言及したコードを追加しましたが、それでもうまくいきませんでしたが、考えさせられました。

Vista の問題かもしれないと思い始めたので、Windows XP を使用している友人に送信したところ、問題なく動作しました。次に、bin ディレクトリの Release フォルダーの外で実行してみました。

動作しないのは、Visual Studio 2008 IDE 内で実行している場合のみです。これは奇妙なことです。

于 2008-11-11T21:58:29.140 に答える
0

投稿したコードは機能するはずです。

これを DragEnter メソッドの先頭に置いてみてください

string formats = string.Join( "\n", e.Data.GetFormats(false) );
MessageBox.Show( formats );

これにより、d'n'd 操作に関連付けられたデータ形式がダンプされます。問題がどこにあるかを絞り込むのに役立つかもしれません。

于 2008-11-11T18:32:10.867 に答える
0

STAThread属性をメイン メソッドに追加しようとしましたか?

  [STAThread]
  static void Main(string[] args)
  {
  }

@mattruma と同じ問題があり、ドラッグ アンド ドロップ イベントが発生しませんでした。STAThreadメインメソッドに属性を追加すると、期待どおりに機能しました。

于 2012-09-27T16:14:27.660 に答える