- - PR -
VB.NETでのフォーム遷移について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-03-03 16:11
いつも参考にさせていただいております。
下記に確認内容をまとめてみました。 #Form@がスタートアップに設定されていたとします。 Form@の「ボタン」で以下の2つを記述し・・・ 処理1:FormAをShow 処理2:Form@をClose これを実行した場合にアプリケーション全体が終了してしまいます。 (インスタンス化させた元フォームをクローズさせるので 当たり前と言えばそれまでなんですが・・・) ★1つのEXEで画面を次々と遷移させる場合に、 前画面をCloseさせる方法がありましたら教えてください。 上記はVB6.0では問題無かった処理ですが、 VB.NETで小難しい振り分け処理をコーディングすることなく Form間だけで実現させる方法はありますか? | ||||||||
|
投稿日時: 2004-03-03 16:18
Dammyの非表示フォームを用意しておいて
Form1をShow Form2をShow Form1をClose すると言うのはどうですか? | ||||||||
|
投稿日時: 2004-03-04 08:18
メインとなるフォームをCloseすると、CloseはDisposeの別名でもあるため(異論はあろうかと思いますが、System.Windows.Forms.Formにおいては、と限定して)、アプリケーション全体をDisposeすることになります。したがって、CloseせずにHideします。
下のリンクから私のウェブページへ行って、VS.NETのページ、一番下にテストプロジェクトがありますので、参考にしてください。 | ||||||||
|
投稿日時: 2004-03-04 09:28
便乗して質問させてください。
ちょうど聞きたいと思っていたので・・・ Form@がスタートアップの画面です。 Form@:FormAをインスタンス化する Form@:FormAのOwnerにForm@をセットする Form@:Form@がFormAをShowする Form@:Form@をHideする FormA:FormAをCloseする FormA:Owner(Form@)をShowする と書いてある時に、FormAのCloseのタイミングでEXEが終了してしまいます。 Form@もFormAもSytem.Windows。Forms.Formを継承したFormXを継承して 作成した画面なので、これも当然といえば当然なのですが、 どうすればスマートな遷移にできるでしょうか・・・? あ・・・ すみません、JittaさんのVS.NETのページを見ていないですが、 とりあえず投稿させてください。 今の環境は自席ではネットができるけれど、VS.NETが入っていない(とても動かせるスペックではない)、 開発用の別フロアではハイスペックマシンがあるけれど、ネットができないという不便な状況なので・・・ 今から開発用フロアに行って確認させて頂きます。 | ||||||||
|
投稿日時: 2004-03-04 09:59
おじゃまします。私の場合
Form@がメインメニューになっていて、他のFormへ行ってまたForm@へ戻ってくる、つまり再び表示する可能性のあるFormは、「Hide」で処理しています。 たくさんのFormがHideになったら困るでしょうけど・・・・ | ||||||||
|
投稿日時: 2004-03-04 10:03
Closeしてはだめというのはその通りですが、 Disposeを引き合いに出しているのは違うと思います。 スタートアップの設定で例えばForm1を指定した場合、 Form1に下記のコードを書いたのと同じことになります。 Public Shared Sub Main Application.Run(New Form1()) End Sub このことは、VS.NETで新規アプリを作成し、 特にコーディングせず、スタートアップ指定をForm1にした場合と スタートアップ指定をSub Mainにして上記のコードをForm1に書いた場合と それぞれでexeを作成し、ildasm.exeでILコードを見ることで確認できます。 #下記引用では丸付き数字は普通の数字に変更し、便宜のため各手順に番号をふってます。
この手順通りなら(5)で終了はしませんけど・・・ その代わり、(5)の手順でForm2をCloseした時点でForm2の OwnerプロパティもNothingになるようで、 (6)でNullReferenceExceptionの例外が発生します。 単純に(5)、(6)の順序を逆にすれば特に問題ありません。 | ||||||||
|
投稿日時: 2004-03-04 10:16
5と6は順番を入れ替えた方がよいと思います。Form.Closeは、Form.Showに対してはDisposeと同等なので、破棄した後にプロパティを操作しようとしていることになります。もちろん、Closingイベントで6を行うのであれば、まだ破棄されていないので、大丈夫ですが。 簡単なPG作りましたが、アプリまで落ちることはありませんよ? frm1:ボタンクリックでfrm2.show : me.hide frm2:ボタンクリックでme.owner.show : me.close *番号付け間違い。 hideするならownerに設定する必要はないのでは?←「自分が閉じた後に表示するフォーム」を知らなければいけないのか。 [ メッセージ編集済み 編集者: Jitta 編集日時 2004-03-04 11:57 ] | ||||||||
|
投稿日時: 2004-03-04 10:51
ご返答頂いた方々、ありがとうございました!
(参考、勉強になりました) とりあえず遷移元はHIDEで対応していきます〜 Jittaさん、サンプル頂きました♪ |