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
}
}
私が試したこと:
私の質問を読んでくれてありがとう
編集:
ファイルがデスクトップ (%userprofile%\Desktop) にあることをテストするとき。しかし、それらがどこに保管されているかは問題ではありません。画像はブラウザまたはワード文書からフォームにドラッグすることになっています
別の編集:
Visual Studio なしで実行しようとすると、AllowDrop = true; で発生する InvalidOperationException が発生します。しかし、私はそれを捕まえようとしても反応がありません
解決策: OMG... そう.... ちょっと public static Main() を viewer.cs ファイルに移動しました.... STAThread 属性を追加するのを忘れていました。
Visual Studio の外でビルドを再度実行したときにこれを見つけました。例外フォームでは、スレッドが STAThread である必要があることを示していましたが、メッセージのその部分が隠され、見つけにくいことがわかりました。
とにかく: 常に STATHREAD を使用してください:P