- PR -

子フォームの例外処理

投稿者投稿内容
いっこさん
ベテラン
会議室デビュー日: 2003/07/03
投稿数: 67
投稿日時: 2004-09-30 21:34
いつもお世話になっています。

現在、開発中のアプリケーションは、Module→親フォーム→子フォームの順で起動する仕組みになっています。
Exceptionが発生した場合は、Module上のTry〜Catchで処理しようとしています。
親フォームで発生したExceptionはCatchできるのですが、子フォームで発生したExceptionはCatchできません。
Moduleで子フォームで発生したExceptionを取得するには、どのようにすればよろしいでしょうか。
ご存知の方がおられましたら、ご教示の方お願いします。

また、不足な点などありましたらご指摘お願いします。

---開発環境---------------------
[OS]WindowsXP pro SP1
[.NET].NET Framework ver1.1 SP1
[VS]VisualStudio.NET 2003 SP(無)
[開発物].NET アプリ
[言語]VB.NET
--------------------------------
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-10-01 06:32
諸農です。

Application.ThreadExceptionを使って
トラップするというのはどうでしょうか。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
いっこさん
ベテラン
会議室デビュー日: 2003/07/03
投稿数: 67
投稿日時: 2004-10-01 09:31
回答ありがとうございます。

引用:

Jubeiさんの書き込み (2004-10-01 06:32) より:
諸農です。

Application.ThreadExceptionを使って
トラップするというのはどうでしょうか。






Module起動だとApplication.ThreadExceptionが使用できませんでした。
UnhandledExceptionで処理しようと試みたのですが、期待するような結果が得られず、Modeleの一箇所でCatchする方法に
至りました。
説明が不足ですみません。
Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-10-01 11:53
諸農です。

> Module起動だとApplication.ThreadExceptionが使用できませんでした。

申し訳ないです。
VB.NETのことがよく判らないので、どういう現象なのかがよく分からない
のですが。。。

モジュール側にトラップ処理を記述したイベントデリゲートを準備しておいて、
Formクラス側で(Applicationクラスを参照できるところで、の意)デリゲートをApplication.ThreadExceptionにセットすることが不可ということなのでしょうか。。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
いっこさん
ベテラン
会議室デビュー日: 2003/07/03
投稿数: 67
投稿日時: 2004-10-01 13:10
引用:

Jubeiさんの書き込み (2004-10-01 11:53) より:
諸農です。

> Module起動だとApplication.ThreadExceptionが使用できませんでした。

モジュール側にトラップ処理を記述したイベントデリゲートを準備しておいて、
Formクラス側で(Applicationクラスを参照できるところで、の意)デリゲートをApplication.ThreadExceptionにセットすることが不可ということなのでしょうか。



その通りだと思います。
Module起動の場合、FormクラスにApplication.ThreadExceptionがあっても、例外を処理することができませんでした。(Form起動だとできました)
また、ModuleにUnhandledExceptionを記述して、それで処理をしようとしたのですが、希望通りの結果が得られませんでした。
Moduleの親フォームを起動する処理のところにTry〜Catchを記述して、それで例外処理をまとめて処理しようとしています。
その場合、親フォームから子フォームを起動して、子フォームで発生した例外処理をModuleで処理する方法で悩んでいます。
いっこさん
ベテラン
会議室デビュー日: 2003/07/03
投稿数: 67
投稿日時: 2004-10-06 16:06
引用:

トージ。さんの書き込み (2004-09-30 21:34) より:
いつもお世話になっています。

現在、開発中のアプリケーションは、Module→親フォーム→子フォームの順で起動する仕組みになっています。
Exceptionが発生した場合は、Module上のTry〜Catchで処理しようとしています。
親フォームで発生したExceptionはCatchできるのですが、子フォームで発生したExceptionはCatchできません。
Moduleで子フォームで発生したExceptionを取得するには、どのようにすればよろしいでしょうか。
ご存知の方がおられましたら、ご教示の方お願いします。

また、不足な点などありましたらご指摘お願いします。

---開発環境---------------------
[OS]WindowsXP pro SP1
[.NET].NET Framework ver1.1 SP1
[VS]VisualStudio.NET 2003 SP(無)
[開発物].NET アプリ
[言語]VB.NET
--------------------------------




コードを公開します。
デバッグ実行ではCatchできるのですが、Exeを起動するとJITメッセージが表示されます。

コード:
1:起動モジュール
    Friend frm_form1 As form1
    Friend frm_form2 As Form2
    Sub main()
        Try
            frm_form1 = New Form1
            frm_form1.ShowDialog()
        Catch ex As Exception
            MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
    End Sub

2.親フォーム
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

            frm_form2 = New Form2
            frm_form2.ShowDialog()

    End Sub

3.子フォーム
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Throw New Exception
    End Sub

にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2004-10-06 16:45
親フォームを
 Friend frm_form1 As form1
 Friend frm_form2 As Form2
 Sub main()
  AddHandler Application.ThreadException, New System.Threading.ThreadExceptionEventHandler(AddressOf UnhandledException)
  frm_form1 = New Form1
  frm_form1.ShowDialog()
 End Sub

 Sub UnhandledException(ByVal o As Object, ByVal e As System.Threading.ThreadExceptionEventArgs)
  MessageBox.Show(e.Exception.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error)
 End Sub
としてみてはどうでしょうか。
いっこさん
ベテラン
会議室デビュー日: 2003/07/03
投稿数: 67
投稿日時: 2004-10-06 16:54
引用:

にしざきさんの書き込み (2004-10-06 16:45) より:
親フォームを
 Friend frm_form1 As form1
 Friend frm_form2 As Form2
 Sub main()
  AddHandler Application.ThreadException, New System.Threading.ThreadExceptionEventHandler(AddressOf UnhandledException)
  frm_form1 = New Form1
  frm_form1.ShowDialog()
 End Sub

 Sub UnhandledException(ByVal o As Object, ByVal e As System.Threading.ThreadExceptionEventArgs)
  MessageBox.Show(e.Exception.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error)
 End Sub
としてみてはどうでしょうか。



ご指摘通りに修正したところ例外処理をすることができました。
ありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)