- PR -

sub mainで起動したフォームを終了するとソフト全体が終了します。

1
投稿者投稿内容
やっくん
会議室デビュー日: 2004/11/12
投稿数: 2
投稿日時: 2004-11-18 13:22
VB.NETでsub mainで宣言して以下のようにログイン画面を起動します。

'初期起動モジュール
Sub main()
  Application.Run(New frmLogIn())
Exit Sub
end sub

このあとログイン画面でログイン認証が終わった後に
Me.closeでログイン画面を終了し、
次の画面を立ち上げたところ
sub mainの処理の続きが走ってしまい、
ソフトが終了しました。

sub mainで起動したフォームが終了すると
ソフト全体が終了するのでしょうか?

また、これの対処法はないでしょうか?
バックグラウンドでフォームをHideにするぐらいしか思いつきませんでした。

教えて下さい。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-18 15:13
あまりWindowsFormを探ったことが無いのですが...

> sub mainで起動したフォームが終了すると
> ソフト全体が終了するのでしょうか?

Application.Run メソッド (Form)
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfSystemWindowsFormsApplicationClassRunTopic3.asp
> このメソッドは、 Closed イベントの mainForm パラメータにイベント ハンドラ
> を追加します。
> イベント ハンドラは、 ExitThread を呼び出して、アプリケーションをクリーン
> アップします。

とのことなんで、FormをCloseするとメッセージループが終わるんでしょう。

> フォームをHide
簡単な方法として、
はじめに、メインとなるフォームを呼び出してはいかが?
そのメインのフォームからログインフォームを出すとか。

_________________
たつごろー
codeseek
こみゅぷらす
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2004-11-18 15:17
特定の「メインフォーム」を置きたくない場合には、
Application.Run に ApplicationContext を渡します。
やっくん
会議室デビュー日: 2004/11/12
投稿数: 2
投稿日時: 2004-11-18 15:39
ApplicationContextを使用して、
以下のようなソースに変更しました。

'初期起動モジュール
Sub main()
  frmLogIn.show
Application.Run(New ApplicationContext())
Exit Sub
end sub

フォームを与えず、起動させましたが、
フォーム(frmLogIn)で右上の×ボタンにてソフトを終了すると
今度はバックグラウンドでソフトのプロセスが残るようになりました。

フォーム終了時に完全にソフトを終了するように
コードを書かないとだめなのでしょうか?

[ メッセージ編集済み 編集者: やっくん 編集日時 2004-11-18 15:40 ]
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-18 16:09

Application.Run メソッド (ApplicationContext)
http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfSystemWindowsFormsApplicationClassRunTopic2.asp

によると

Exit または ExitThread が呼び出されるまで、または ThreadExit イベントがコンテキスト オブジェクトで発生するまで、このメッセージ ループは実行されます。

だそうですので、ExitかExitThreadすればいいんではないかと想像します。

_________________
たつごろー
codeseek
こみゅぷらす
1

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