C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: Form.Show()での例外をcatchするには


(過去ログ 28 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■13353 / inTopicNo.1)  Form.Show()での例外をcatchするには
  
□投稿者/ E.S. (1回)-(2008/01/28(Mon) 16:23:07)

分類:[.NET 全般] 

こんにちは。

どうぞご教示ください。

Form1は、あるボタンが押されると、Form2とForm3を呼び出します。
(Form2/Form3とも、Showメソッドによる、モーダレスです。)

この、Form2/Form3において、例外が発生した場合に、
・Form2/Form3は、余計なことを考えずに、throwするだけにしたい。
  (作り手がバラバラのため、属人化した動きにならないように)
・別のどこかが、一か所でエラー画面を表示したい。
と考えています。

で、その例外をcatchする場所がなく困っています。
ShowDialog()で呼び出すなら、そのShowDialogをtry〜catchで囲えばいいのですが、
モーダレスを実現したいため、Showを利用しています。
現状では、Application.Runをtry〜catchで囲って拾っていますが、
そうなると、Form2が例外をthrowしたときに、一緒にForm3まで閉じてしまいます。

やりたいこと
・モーダレスで各Formを呼び出ししたい。
・例外が発生してFormを閉じるのは、その例外を発生させたFormだけがよい。
・各Formではエラー画面を表示させる記述をしたくなく、throwするだけにしたい。

今のところ、Form2/Form3についてスレッドを生成してShowDialogにする方法を検討しているのですが、
他にうまい方法がないものか模索中です。

よい方法等あれば、どうか教えてください。

引用返信 編集キー/
■13355 / inTopicNo.2)  Re[1]: Form.Show()での例外をcatchするには
□投稿者/ やじゅ (58回)-(2008/01/28(Mon) 17:01:07)
No13353 (E.S. さん) に返信
> やりたいこと
> ・モーダレスで各Formを呼び出ししたい。
> ・例外が発生してFormを閉じるのは、その例外を発生させたFormだけがよい。
> ・各Formではエラー画面を表示させる記述をしたくなく、throwするだけにしたい。
>

VB.NETですが、私の開発しているメニュー画面で下記のようにしています。
呼出しするフォームのクローズイベントをAddHandlerして、各フォームの
Closeイベントが呼ばれると、メニューのCloseイベント処理にくるので、
senderの内容からメニューか各フォ−ムかを判断して処理しています。
これと似たような考えでやればいいような気がします。

AddHandler form.FormClosed, AddressOf FormClossed
'フォームを表示
form.Show()

Private Sub FormClossed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

If sender.Name = Me.Name Then
'メニューを破棄
  ・・・
else
'メニューより起動されたFormを破棄
Dim form As Form = CType(sender, Form)
  ・・・
end if
引用返信 編集キー/
■13356 / inTopicNo.3)  Re[2]: Form.Show()での例外をcatchするには
□投稿者/ E.S. (2回)-(2008/01/28(Mon) 17:18:29)
ありがとうございます!
その方法で進めてみたいと思います。

また、Application.ThreadExceptionのイベントを登録しておけば
うまくいきそうな予感がします。
http://www.atmarkit.co.jp/fdotnet/dotnettips/320appexception/appexception.html


早速の返信ありがとうございました。





No13355 (やじゅ さん) に返信
> ■No13353 (E.S. さん) に返信
>>やりたいこと
>>・モーダレスで各Formを呼び出ししたい。
>>・例外が発生してFormを閉じるのは、その例外を発生させたFormだけがよい。
>>・各Formではエラー画面を表示させる記述をしたくなく、throwするだけにしたい。
>>
>
> VB.NETですが、私の開発しているメニュー画面で下記のようにしています。
> 呼出しするフォームのクローズイベントをAddHandlerして、各フォームの
> Closeイベントが呼ばれると、メニューのCloseイベント処理にくるので、
> senderの内容からメニューか各フォ−ムかを判断して処理しています。
> これと似たような考えでやればいいような気がします。
>
> AddHandler form.FormClosed, AddressOf FormClossed
> 'フォームを表示
> form.Show()
>
> Private Sub FormClossed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
>
> If sender.Name = Me.Name Then
> 'メニューを破棄
>   ・・・
> else
> 'メニューより起動されたFormを破棄
> Dim form As Form = CType(sender, Form)
>   ・・・
> end if
引用返信 編集キー/
■13357 / inTopicNo.4)  Re[1]: Form.Show()での例外をcatchするには
□投稿者/ 渋木宏明(ひどり) (643回)-(2008/01/28(Mon) 17:22:00)
渋木宏明(ひどり) さんの Web サイト
>・別のどこかが、一か所でエラー画面を表示したい。

一般には Application.ThreadException が適切です。

けど、そのタイミングでは例外を投げた Form だけを都合よく後始末付けられるかどうか微妙なとこです。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -