- - PR -
フォームの閉じ方
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-16 10:48
バージョン:VB2005 OS:WindowsXP
親フォームから子フォームを開き、そこから更に子フォームを開いたときに、子フォームのウィンドウのクローズボタン(×ボタン)を押すと全てのフォームを閉じる様にしたいのですがどうすればいいのでしょうか? 以前 Application.Exit というのを使っていたのですが、.exeでは大丈夫でしたが開発環境でデバッグしてこの動作をすると必ず親の親フォームでエラーが起きます。 | ||||||||||||
|
投稿日時: 2007-01-16 11:16
親/子の関係は?
MDI の子なの、独立Formを親子関係で結合しているのか、それ以外なのか。 いずれにしても、 Errorの内容をかきませう。 単純な親子孫関係なら通常終了しますが。 -最後追加しました- _________________ ognac@わんくま同盟 [ メッセージ編集済み 編集者: ognac 編集日時 2007-01-16 11:19 ] | ||||||||||||
|
投稿日時: 2007-01-16 11:17
どんなエラー? コンパイル時に、Warning無視してなくない? | ||||||||||||
|
投稿日時: 2007-01-16 11:51
返信ありがとうございます。この方法でよいのかわからなかったのでエラー表示を書くのを忘れてました
オブジェクト参照がオブジェクト インスタンスに設定されていません。 というエラーが起きます。プログラムを簡単に書くと ボタンを押すとFORM1のButton_Clickイベントで子フォームを開く Me.Visible = False FORM2.ShowDialog(Me) Me.Visible = True FORM2.Dispose() '後始末 フォーム2の×ボタンを押すとFORM2のFormClosingイベントでプログラムを終了 Application.Exit というものです。 | ||||||||||||
|
投稿日時: 2007-01-16 12:11
>フォーム2の×ボタンを押すとFORM2のFormClosingイベントでプログラムを終了 > Application.Exit Dialog状態のフォーム2の中から Application.Exit を呼ぶの? 作法としてまずくありありません? 以下の処理 >FORM2.ShowDialog(Me) >Me.Visible = True >FORM2.Dispose() を否定する流れにするのは如何なものかと。 Private Sub Form2_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing Application.Exit() End Sub この記述だと traceするとApplication.Exit()が二回走る動きをしますよ。(アレなぜ?) _________________ ognac@わんくま同盟 | ||||||||||||
|
投稿日時: 2007-01-16 12:14
デバッグしましたでしょうか。行き当たりばったりでは何も解決しません。
少なくともスタックトレースを見て、どのメソッドで問題が起きてるか限定しましょう。 ユーザーコードで問題が起きているなら、デバッグモードだと問題が起きた行番号まで分かります。 _________________ 囚人のジレンマな日々 | ||||||||||||
|
投稿日時: 2007-01-16 13:22
デバッグ時にはエラーは起こりませんでした。FORM2の×ボタンを押すとFORM1の
FORM1.ShowDialog(Me) でエラーが起きます。 確かに2回通ってしまうので一応1回しか通らないようにはしました。 この方法ではたぶんダメだと思うので、何か別の方法を教えていただきたいのですが…。 | ||||||||||||
|
投稿日時: 2007-01-16 15:25
子フォームが Close された時に、親フォームを閉じるのですか? これは、Windows のお作法に反しています。 というより、勝手に子供が親をどうこうしてはいけないでしょう。
これも誤りです。 メイン フォームが存続している状態で、Application.Exit メソッドを使ってはいけません。 すべての Form を閉じれば、アプリケーションは正しく終了します。
本題とは関係ないですが、Dispose メソッドは一刻も早く呼び出すべきです。 また、Try ~ Finally か Using で保証すべきです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |
1|2|3|4
次のページへ»