DOBON.NET DOBON.NETプログラミング掲示板過去ログ

画面遷移について教えてください

環境/言語:[WindowXP/VB2005]
分類:[インストーラ]

VB2005でForm1からform2を呼び出した時に、form1をhydeで隠すのではなく、画面を閉じた状態にして、新たに呼び出した画面以外は表示されていない・実行されていないようにしたいのですが、さっぱり分りません・・・誰か教えてください。
2007/08/24(Fri) 17:05:25 編集(投稿者)

>分類:[インストーラ] 
インストーラ??

スタートアップがForm1のままだとそれは不可能ですね。
Form1が終了した時点でプログラムが終わってしまいますので。

Main関数をスタートアップにして、たとえばForm1の「次へ」ボタンが押されたら
状態をメンバ変数か何かに保存して閉じ、
Main関数に戻ってきたときにその保持した情報を見てForm2を立ち上げるかどうか
を決める

みたいな動きにするんでしょう。
「インストーラ」とは関係ない質問でしょうか?そうであれば、以下のページが参考になるでしょう。

フォームを連続して表示する
http://dobon.net/vb/dotnet/form/showforminsequence.html
分類インストーラはミスです。すいません(><)Blue 軍団さん、管理人さんありがとうございました。 参考にさせていただいてガンバリマス。
たびたび申し訳ないです(><)教えてもらった方法を試してみたのですが、うまくいきません。(ちなみに管理人さんのメインフォームを入れ替える方法を試してみました)どこが悪いのかも分からない状態なので、よろしければ再び助けて下さい。お願いします。
しぇんしぇさん
> どこが悪いのかも分からない状態なので、
と言われましても、実際、症状がわからなければどうしようもないです。

とりあえず、差し支えない程度にソースコードを載せて、
「現在、○行目で落ちてしまう」や、「落ちることはないけれど、望み通りの動きではない」等、
現状の詳細を教えてもらえませんか?
Private Shared mainApplicationContext As ApplicationContext
'''<summary>
'''アプリケーションのメインエントリポイントです。
'''</summary>
<STAThread()> Shared Sub main()
mainApplicationContext = New ApplicationContext

'はじめに開くフォーム
Dim f As New Mein
AddHandler f.Closed, AddressOf f_closed
'メインフォームに設定する
mainApplicationContext.MainForm = f

'メッセージループを開始し、メインフォームを表示
Application.Run(mainApplicationContext)
End Sub

Private Shared Sub f_closed(ByVal sender As Object, ByVal e As EventArgs)
'次に開くフォーム
Dim f As New Shoki
'メインフォームに設定する
mainApplicationContext.MainForm = f
'フォームを表示
f.Show()
End Sub

仕事関係でしっかりのせられなくてもうしわけないです。これは管理人さんに教えて頂いたものをとにかくかいてみたんですけど・・・画面1も2も消えずに、1を自分で閉じると、結局、両方消えてしまいます。ホントに初心者なので、訳わからなくて・・・よろしくお願いします。
挙げられていた例文をそのままスタートクラスに書くと、
@実行 →(SubMain実行) →Form1表示
AForm1閉じる→(Sub f_closed実行)→Form2表示
BForm2閉じる→システム終了
といったものができます。

これを自分の使いやすいように、要件を満たすようにカスタマイズしてくださいね、
ということです。


>form1をhydeで隠すのではなく、画面を閉じた状態にして、新たに呼び出した画面以外は表示されていない・実行されていないようにしたい
ということなので、新しい画面を開くたびにメインフォームをその画面に設定していく、
とするしかないと思います。コーディングはなんとかがんばってもらうしかないですね。

#個人的には何故「form1をhydeで隠すのではなく」という条件がついているのかが気になります。
#これさえなければ余計なことはせずに
#Dim frm1 As New Form1、Me.Hydeとして、
#frm1.Show() でも、frm1.ShowDialog() でも十分なのになあ、と。
takumixさんありがとうございます。条件付きが何故かと言うと、”そういう要望があるから”です(;_;)コーディングがんばってみます!
2007/08/28(Tue) 22:33:44 編集(投稿者)

VB2005だったら,プロジェクトメニューのプロパティを開いて,
アプリケーションタブの「アプリケーションフレームワークを有効にする」に
チェックを入れ(もとから入っている),「シャットダウンモード」を
「最後のフォームが閉じるとき」に設定すれば,特に何も考えずとも大丈夫です。

Form1で

Form2.Show
Me.Close()

でOKなはずです。

追記:ここのメインページの.NET Tipsにもありました!(下の方です)
フォームを連続して表示する
http://dobon.net/vb/dotnet/form/showforminsequence.html

DOBON.NET | プログラミング道 | プログラミング掲示板