C#で既存コントロールを継承させて、ユーザーコントロールを
開発している。
メソッド内で入力不正等のエラー情報を呼び出し元クラスに知らせるために
例外をスローすることで知らせている。
デバック環境ではアプリ側で例外をキャッチしているが、運用マシンでは
OS側からのエラー情報表示となり、アプリ側で例外がキャッチできない。
エラー情報で、
——————————————–
JIT デバッグ
Just-In-Time (JIT) デバッグを有効にするには、
このアプリケーション、またはコンピュータ (machine.config) の構成ファイルの
jitDebugging 値を system.windows.forms セクションで設定しなければなりません。
アプリケーションはまた、デバッグを
有効にしてコンパイルされなければなりません。
例 :
<configuration>
<system.windows.forms jitDebugging=”true” />
</configuration>
JIT デバッグが有効なときは、このダイアログで処理するよりも、ハンドルされていない
例外はすべてコンピュータに登録された JIT デバッガに設定されなければなりません。
——————————————–
とあるので、.NETのmachine.configファイルを記載しているとおりに
修正しているがそれでもうまく動作しない。
他にもいろいろと調査しているがよくはわからない。
ググッテ調査したら同じようなエラー内容がででてきているが、根本的な
問題を解決しないといけないようだ。
それで、例外をスローしているところを修正することにした。
呼び出しクラスでエラー内容をメッセージボックスで表示するように
していたが、本意ではないがユーザークラス側でエラー表示を行い
エラー処理を行った。
また、例外時に呼び出し元側でユーザークラスにフォーカスを設定
していたが、それもこの修正時にbaseを利用してフォーカス設定するように
修正した。
これでなんとか、アプリ側だけで処理できるようになった。
うーん原因なんだが多分、処理を記載しているメソッドは既存クラスを
オーバーライドをしているイベント部分なので、そこで例外をスローしても
キャッチしているのが継承元クラスで、自作コントールとの間に上手に
ハンドル等の情報が伝わっていないのかなと思われる。
多分そこらあたりが問題なのだろう。
直接既存コントールクラスから継承したのも問題なのかもしれない。
コメント