C# MainForm_Loadで終了する際のエラー処理方法は?

このQ&Aのポイント
  • C#のWindowsフォームアプリケーションで、MainForm_Load() 内でエラーが発生した場合、プログラムを終了させたい場合があります。
  • 例えば、設定ファイルを読み込んで動作する場合、MainForm_Load() 内でその読み込み処理を行っているが、ファイルが存在しないなどで失敗した場合にプログラムを終了させることができます。
  • MainForm_Load() 内で Environment.Exit() メソッドを使用することでプログラムを終了させることができます。ただし、初期処理を行うメソッドなので、処理の終了時には注意が必要です。
回答を見る
  • ベストアンサー

C# MainForm_Load エラーで終了には

C#を勉強中です。 Windowsフォームアプリケーションで、 MainForm_Load() 内でエラーが起こったためプログラムを終了したい場合、 例えば、なにか動作環境を定義した設定ファイルがあって、 その内容を読み込んで動作したい場合で、 MainForm_Load()内でその読み込みを行っているが、 ファイルがないなどで失敗したため処理を終わらせたい場合、 MainForm_Load() 内で Environment.Exit() としていいものでしょうか? そもそも MainForm_Load() 内でこういった初期処理をしてもいいものでしょうか? Shown ですべき? というのも、むかーし、ほんの少しだけ MFC VC++ をかじったことがあって、 そのときは、初期エラーで処理を終了させたい場合、 WM_CLOSE ウィンドウメッセージを Post してたような記憶があるもので...。 なんか、MainForm_Load() を途中で終了させてしまっていいのだろうか、と思った次第です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.2

>>そもそも MainForm_Load() 内でこういった初期処理をしてもいいものでしょうか? Shown ですべき? これは、ちょっと考える問題ですね。私も最初はMainForm_Loadで初期処理を行っていましたけど、以下のサイトの説明を読んで、Shownで初期処理を行うように変更しました。 http://www.atmarkit.co.jp/fdotnet/dotnettips/470formshown/formshown.html

ogu-ne
質問者

お礼

回答をありがとうございます。 URL、参考になりました。 もう少し勉強してみたいと思います。 なかなか言語での開発業務は機会がないのですが、やはり楽しいです。 恥ずかしくないコードを書きたいものです。 ありがとうございました。

その他の回答 (1)

回答No.1

MFCやっていたのであれば,MVCの基礎知識くらいは持っているはず。 # Document-ViewはMVCの簡易版。 なので,ちゃんとModelを作ってそちらで読み込ませて,MainFormを作る前にエラーを検知すればよいのではないでしょうか。 MVCとかは抜きにしても,Formに処理を書くのは小さなプログラムでないならば筋が悪いです。

ogu-ne
質問者

お礼

さっそく回答をいただきありがとうございます。 MFCですが、やっていたと言っても、既存のソースのメンテくらいで、 そんなにバリバリなわけではなかったんです。 そんな中で、自分なりの理解をしていたというか。 Modelを作ってそちらで~、というのはすみません、 あまり理解できませんでした。 MVCというのは初耳です。 勉強してみます。 ありがとうございました。

関連するQ&A

  • Form_Load 終了後

    Form_Load  省略 End Sub フォームが表示された後、 private sub test  do   省略  loop while() End sub test関数内の処理(do...loop)を処理したいのですが フォームロード関数終了(End sub)後にtest関数の処理をしたい 場合どのようにすれば、良いのでしょうか  よろしくお願いします Timer関数以外で対応したいと考えています

  • デバックモードが終了しません

    VC6(SP5)からADO(Oralce)へアクセスしているのですが、 処理は正常に行えるのですが、終了処理(ウインドウを閉じる又はAfxGetMainWnd()->PostMessage( WM_CLOSE );を行う)をすると、VSがデバックモードのままで終了しません。 これは、ソースが悪いのでしょうか? それとも、何か設定が間違っているのでしょうか? ちなみに、exeを実行し終了すると、問題なく終了します。エラー等は発生しません。 よろしくお願いします。

  • simplexml_load_fileのエラー

    AmazonのAPIを使ったWebサイトを作っていて、simplexml_load_fileを使って外部サーバのXMLを読み込もうとしています。 ローカル・サーバ1ではうまくいきますが、サーバ2ではI/O warning : failed to load external entity となり読み込めません。 3つのサーバで使用しているプログラムは全く同じです。 PHPのバージョン、SimpleXMLのRevisionは下記の通り。 ローカル:5.2.5、1.151.2.22.2.35 サーバ1:5.2.9、1.151.2.22.2.46 サーバ2:5.2.9、1.151.2.22.2.46 調べていると、XML文字列の中に実体参照等パースエラーとなる文字が含まれているとこのようなエラーが出るとのことでしたが、該当するような文字列はありませんし、同じプログラムでも別のサーバであれば取得できるのでその可能性は考え辛いですが、この場合の対処方法として、file_get_contentsで一度文字列として受け取ってから、simplexml_load_stringでパースするとあったので、それも試しました。 しかし、simplexml_load_fileであれば数秒で取得できるものが、file_get_contentsだと4分以上かかりました。 できればsimplexml_load_fileで行いたいのですが、上記のような違いが出る可能性として考えられることは何かありますでしょうか。

    • 締切済み
    • PHP
  • Excel 終了時のエラー

    Excelを終了する際に、エラーがでて困っています。 Excelファイルの内容を確認するために、ファイルを開いてすぐに閉じると ”Microsoft office Excel は動作を停止しました。”というメッセージが出て エラー終了します。 ファイルは改廃していないので、ファイルが壊れることはありません。 すぐに閉じずに、しばらくたってから閉じるとエラーは出ません。 実害はないのですが、毎回エラーが出て気持ち良くないので、どなたか 解決策をご存じの方、いらっしゃいませんか? OSは、Windows 7(32bit Home premium) Officeは、2007 です。 ちなみに、Excelだけではなく WORD、POWER POINTも同じエラーが出ます。 以上、宜しくお願いいたします。

  • VB6でForm_Load中にイベントを発生させない方法

    VB6でForm_Loadにオプションボタンの選択を変更するとオプションボタンのクリックイベント(選択変更)が動作してしまいます。 Form_Loadの初期表示の設定をしているときは、オプションボタンのイベントを無効にしたいのですがどのようにしたら良いでしょうか? RemoveHandler等の処理があるみたいですが良く分かりません。 良い方法を教えてください。 宜しくお願いします。。

  • IE7で強制終了

     IE7で強制終了が発生するということについて以前にもここに質疑が出ていますが、私の場合も同じようなことが発生しています。  ただし、多くの場合、ひとつのIE7のウィンドウを開き、そこに複数のページを開いたときに発生し、何かのタイミングで突然強制終了するほか、正常に動作していて、これを手操作で終了すると、ウィンドウが閉じ終わった瞬間に「問題が発生したため、Internet Explorer を終了します。 ご不便をおかけして申し訳ありません。」というメッセージが表示されます。  そのときは、その後何事もなかったように動作しますが、パソコンを終了したとき、ほかに何も開いていないのに何かのファイルの終了処理をしている表示が出たり、また、Windows XPの終了処理の途中に、「アプリケーションエラー」として「"0x69532047"の命令が"0x00000000"を参照しました。メモリが"read"になることはできませんでした。プログラムを終了するには・・・・」というメッセージが表示されますがそのままWindows XPは正常に停止します。  パソコンに問題があることも考えて、Windows XPの再セットアップを実行しましたが状況は変わりません。  IE7自体にバグがあるとの話も聞きますが、いかがなものでしょうか?

  • SQLエラー処理の関数の中で処理を施した後の終了の仕方について質問です。

    全体では配信ファイルを読み込み、 そのデータをデータベースにインサートするプログラムです。 この中のSQLエラー処理関数で、 エラーが起きてる行数とそのエラーメッセージ、オラクルエラーメッセージを出力させた後、ロールバックします。 その後、配信ファイルが開いている場合は閉じて、その旨を出力し、 閉じている場合は戻り値1で終了させています。 配信ファイルが開いている場合も 閉じて終了させるのは下記のようにして大丈夫なんでしょうか? ......................... ......................... EXEC SQL ROLLBACK RELEASE; if ( Fp != NULL ) { fclose( Fp ); printf( "FILE CLOSE !\n" ) return (0); } else { } exit (1); }

  • Word2007の終了時エラーについて

    Word2007ですが、ファイルを開いておいてそのまま、新たに新規文章を開いて作業をして右上の×印で終了しようとすると、”Microsoft Office Wordは動作を停止しました”とのエラーが出て、画面が白っぽくなります。 ファイルは1つだけなら問題ありませんし、既製のファイルは2つ開いても上記のような不具合はありません。 不便で困っています。 解決法を教えて下さい。 OSはWindows7 Proffesional 64bitです。

  • Cシェルでエラーハンドリングする方法について

    Cシェルでエラーハンドリングする方法について 特定のファイルをしたのディレクトリに移動させる際、特定ファイルがなければ、処理を終了するという記述の仕方を教えていただきたいです。 すでに、以下のように記述をしてファイルを指定したディレクトリへ移動する動作確認はできています。 ------------------------------------------ set dir1=/export/home/username/test1_dir set dir2=/export/home/username/test2_dir mv ${dir1}/*.log /export/home/username/mv_dir mv ${dir2}/*.csv /export/home/username/mv_dir ------------------------------------------ この場合、*.log、*csvがディレクトリ内に存在すれば、移動先ディレクトリへ移動し ファイルがなければそのまま終了しています。 ファイルがなかったとしても、シェルが実行中のまま終わらなかったり エラーがでてしまうことはありませんでしたが、 念のため、ファイルが存在しない場合、何もせず処理を終了する というエラーハンドリング処理を入れたいと思うのですが、 どのように記述したらよいでしょうか? if (条件式) コマンド行 で実施ができるのか?と思うのですが どのような記述となりますでしょうか。

  • PostMessageがERROR_ALREADY_EXISTS終了

    Windows2000 SP3上で動作するDLLを作成しています。 (先方のご都合でSP4ではなくSP3です) そのDLLではPostMessage関数でメッセージを同じウィンドウへ繰り返し送っているのですが、突然、PostMessage関数がERROR_ALREADY_EXISTS終了してしまう現象が発生してしまいます。 そこでご教示頂きたいのですが、PostMessage関数がERROR_ALREADY_EXISTS終了する原因はどんなことが考えられるのでしょうか? 通常、ERROR_ALREADY_EXISTS終了はCreateMutex関数などで同じ名前のオブジェクトがある場合に返されるエラーだと認識しているのですが、PostMessage関数で発生する原因が掴めずに困っています。 以下、ソースですが、単純にPostMessage失敗時にGetLastErrorを行っているだけです... bReturn = PostMessage(hWnd, uMsg, (WPARAM)NULL, (LPARAM)lplMsg); if (bReturn == FALSE) { lasterror = GetLastError(); // エラー処理 } 以上、よろしくお願い致します。