9

WinFormsアプリケーションの開発中に、OpenFileDialogおよびSaveFileDialogコントロールのバグであると私が信じているものに出くわしました。Googleの検索で、同じ問題に気付いた他の1人が見つかりましたが、解決策も回避策も提供されませんでした。このスレッドは、http://bytes.com/topic/visual-basic-net/answers/389470-open-file-dialog-picturebox-click-eventで表示できます。

MouseDownイベントを処理するカスタムコントロールがフォームにあります。マウスがこのコントロール上にあるときにFileDialogコントロール内のファイルをダブルクリックすると(明らかに、それらの間にダイアログが表示されます)、MouseDownイベントがトリガーされます。これは私のコントロールの問題ではないと思います。前に述べた人が、PictureBoxコントロールでこれが発生していることに気付いたからです。ダイアログボックスでマウスボタンを押した(2回目のクリックでファイルを開く)場合でも、ダイアログが閉じたときにイベントがフォームとコントロールに渡されたように見えます。

ダイアログボックスがアクティブなときにコントロールを無効にしようとしましたが、イベントのキャプチャが停止しませんでした。これは、ダイアログが閉じた後にイベントが渡されるためだと思います。そのため、コントロールが再び有効になります。そのクリックがフォームに到達するのを防ぎ、ひいては私のコントロールに到達するのを防ぐ方法を知っている人はいますか?また、これが本当にFileDialogコントロールのバグなのか、それとも設定が正しく構成されていないのかを誰かが確認できますか?

4

2 に答える 2

5

この問題については以前にも聞いたことがありますが、私が知る限り、イベントキューを適切に処理することが重要です。コードを見ずに、ユーザーコントロールの実装が正しいことを確認することは非常に困難ですが、多くの場合、ベースイベントを発生させずにマウスイベントをオーバーライドすると、この種の動作が発生する可能性があります。

于 2010-03-26T08:16:53.040 に答える
3

問題が発生した理由に気付いたとき、MouseDown イベントと MouseMove イベントを試していました。FileDialog ボックスが消えると、MouseMove イベントがトリガーされました。同じコード ブロックを 2 回記述するのを避けるための (明らかにばかげた) 試みとして、MouseMove ハンドラー内から MouseDown ハンドラーを呼び出していました。特定の条件 (つまり、どちらのマウス ボタンも押されていない) によって MouseDown ハンドラーが効果的に実行されると考えていました。なし。この問題は、FileDialog ボックスが (MouseClick ではなく) MouseDown で消えるため、マウス ボタンが押されていたということでした。これにより、予期しないときに MouseDown ハンドラーが条件付きコードを実行しました。

このことから学ぶべきこと: イベント ハンドラーをチェーンするときは、非常に注意が必要です。または、共通の機能をメソッドに取り込み、イベント ハンドラーをチェーンしないでください。:-)

実際の出来事をもっと詳しく見るというアイデアをくれた Jelly Amma に感謝します。

于 2010-03-26T08:41:43.727 に答える