アプリ起動時にフォームを非表示にする。

タグの編集
投稿者 sc040423  (社会人) 投稿日時 2010/2/19 09:48:20
現在、vb.net 2008にてアプリ製造中です。
皆様のお力を貸していただきたく、質問させてください。

dim str as string
dim f1 as new form1(str)
f1.showdaialog()

上記のように変数を伴って別フォームより、非表示で起動したいフォームを呼び出しております。

vb.netではアプリのロードイベントにて、me.visible =false 等で非表示にできないことをしりました。

そこで、?http://dobon.net/vb/dotnet/form/hideformwithtrayicon.html?を参考にいろいろと試してみましたがだめでした。

フォームを宣言する際、引数を必要としている作りであるため、上記URLの
パラメータを指定せずにApplication.Runを呼び出す方法が使えないため、
フォーム最小化、タスクバー非表示の方法を用いてみると、アプリが終了してしまいました。

次に、タイマーを使い、me.visible= falseとすると、その場合もアプリが終了してしまいました。
また、タイマーイベント内にて、フォーム最小化、タスクバー非表示の方法を試してみても、アプリが終了する結果となりました。

フォームがウィンドウ画面から確認できない状態になるとアプリが終了する仕様になってしまったのでしょうか。
また、この現象を回避し、起動時にフォームを非表示にする方法があればお教えください。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/2/19 18:49:10
> vb.netではアプリのロードイベントにて、me.visible =false 等で非表示にできないことをしりました。
「アプリのロードイベント」というのは、「Form の Load イベント」の事でしょうか?
それとも、「Application の Startup イベント」の事でしょうか?

> パラメータを指定せずにApplication.Runを呼び出す方法が使えないため、
そうですか? 特に問題無く呼び出せると思いますよ。
Dim f1 As New Form1("parameter")
Application.Run(F1)


それとも、上記のようにすると F1 が表示されてしまう事が問題なのでしょうか?

> タイマーを使い、me.visible= falseとすると
あるいは、Shown イベントで Me.Hide() とか。

> その場合もアプリが終了してしまいました。
普通は、非表示にしただけでは終了しないと思います。Close しない限りは。

……もしかして、ShowModalDialog メソッドで呼び出していたりはしませんか?


> フォームがウィンドウ画面から確認できない状態になるとアプリが終了する仕様になってしまったのでしょうか。
そうすることもできますし、そうしない事もできます。

「アプリケーション フレームワークを有効にする」のチェックは、On/Offどちらにしていますか?
On にしている場合には、「シャットダウン モード」の設定によって動作が変わります。

Off にしている場合には、ApplicationContext を用意することで、
Form の状態とは関係なく、アプリケーションの終了タイミングを自由に決められます。
http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200602/06020024.txt
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2010/2/19 19:58:28
誤記訂正。

> もしかして、ShowModalDialog メソッドで呼び出していたりはしませんか?
上記は、「ShowDialog メソッド」の書き間違いです。m(_ _;)m

つまり、Main メソッド内に
Application.Run(New Form1("arg"))
ではなく、
Using f As New Form1("arg")
  f.ShowDialog()
End Using
などと書いていたのではありませんか、という確認でした。

後者の場合、Form が非表示になると、そのまま Main の End Sub に到達してしまい、アプリが終了します。
前者の場合、Form が非表示になっても Application.Run は続行されるため、アプリは起動し続けます。


ShowDialog メソッドで呼び出した場合は、
 ・呼び出し元は、フォームが表示されている間、処理がそこでブロックされる。
  そしてフォームが閉じるか非表示になるまで、呼び出し元へ制御が戻らない。
 ・フォームが閉じられても、そのフォームは自動的に破棄されないため、
  呼び出し元で Using を使うなどして、そのフォームを Dispose しなければならない。
という動作になります。

一方、Application.Run や Show メソッドなどで呼び出した場合は、
 ・フォームが表示された後も、呼び出し元の処理はブロックされない。
 ・フォームが閉じられた場合、そのフォームは自動的に破棄されるため、
  そのフォームを明示的に Dispose する必要はない。
という動作になります。
投稿者 (削除されました)  () 投稿日時 2010/2/20 07:30:04
(削除されました)
投稿者 (削除されました)  () 投稿日時 2010/2/21 06:14:33
(削除されました)