0

C# で小さなフォームを作成し、いくつかのドラッグ ドロップ イベントを登録しました。しかし、私はそれを正しく機能させることができません!

目標: ファイルを explorer.exe からフォームにドラッグして処理し、写真をフォームにドラッグします。.txt ファイルをデスクトップからフォームにドラッグして、コードをテストします。そうするときに(/)カーソルを表示します

コード:

public partial class Viewer : Form
{
    public Viewer()
    {
        InitializeComponent();
        this.AllowDrop = true;
        this.DragEnter += new DragEventHandler(Viewer_DragEnter);
        this.DragDrop += new DragEventHandler(Viewer_DragDrop);
    }
    public void Viewer_DragEnter(object sender, DragEventArgs e)
    {
        Console.WriteLine("Viewer_DragEnter");// Line has breakpoint
    }
    public void Viewer_DragDrop(object sender, DragEventArgs e)
    {
        Console.WriteLine("Viewer_DragDrop: "+e.Data.GetFormats());// Line has breakpoint
    }
}

私が試したこと:

  • コンストラクターをキャッチしよう => 何もない
  • visualstudio (2010) の外で成功したビルドを実行する
  • アイテムをフォームにドラッグするときに、explorer.exe を管理者として実行する

    私の質問を読んでくれてありがとう

    編集:
    ファイルがデスクトップ (%userprofile%\Desktop) にあることをテストするとき。しかし、それらがどこに保管されているかは問題ではありません。画像はブラウザまたはワード文書からフォームにドラッグすることになっています

    別の編集:
    Visual Studio なしで実行しようとすると、AllowDrop = true; で発生する InvalidOperationException が発生します。しかし、私はそれを捕まえようとしても反応がありません

    解決策: OMG... そう.... ちょっと public static Main() を viewer.cs ファイルに移動しました.... STAThread 属性を追加するのを忘れていました。
    Visual Studio の外でビルドを再度実行したときにこれを見つけました。例外フォームでは、スレッドが STAThread である必要があることを示していましたが、メッセージのその部分が隠され、見つけにくいことがわかりました。

    とにかく: 常に STATHREAD を使用してください:P

  • 4

    0 に答える 0