Formを非表示にしたい

タグの編集
投稿者 単単  (社会人) 投稿日時 2011/11/23 11:41:28
スタートアップフォームを Form1として、
Form1の中にVBを記述しました。
その内容は、CAD上の文字を選択して、その値を取り込むというものです。
この取り込んだ、内容に応じて Form2 または Form3 がロードされるように
なっています。
うまく動作しているのですが、空白のForm1が表示されています。
そこで
・スタートアップで、フォーム無しで起動
・フォームを非表示にする。
などをしたいのですが、どうしたら良いでしょうか?
よろしくお願いいたします。
私のスキルは、VBの勉強をはじめたばかりです。
投稿者 るきお  (社会人) 投稿日時 2011/11/23 11:54:56
バージョンが書いていないのでVisual Basic 2010 Express Editionを使っていると仮定してお答えします。

初期状態ではスタートアップフォームが表示されなくなるとプログラム全体が終了してしまいます。
これを変更して、どれか1つでもフォームが表示されていればプログラムは終了しないようにするには、
[プロジェクト]メニューの[xxxxのプロパティ]で「アプリケーションページ」を選択し、「シャットダウンモード」を「最後のフォームが閉じるとき」にします。
そのうえで、Form1はForm2、Form3を表示してから自分自身を閉じる(か非表示にする)ようにすれば単単さんの期待する動作になると思います。
順番を逆にして、Form1を閉じてからForm2, Form3を表示しようとするとプログラムが終わってしまうので注意してください。

別の方法として、同じ設定画面で「アプリケーションフレームワークを有効にする」をオフにして、「スタートアップオブジェクト」を「Sub Main」にするとFormではない部分からプログラムを開始することもでき、これでも解決できますが、単単さんがVBの勉強をはじめたばかりということですのでこの説明は割愛します。
投稿者 単単  (社会人) 投稿日時 2011/11/23 14:27:19
るきおさん。

再び、ありがとうございました。
アドバイスいただいた、最初の案で、うまくいくことを確認できました。
後者の案でもトライしましたが、Sub Main をどこに作成するのかが
ヘルプや、参考書を読んだのですが、判りませんでした。
恐縮ですが、ご指導お願いできないでしょうか?
調べる手順だけでもOKです。 当方、VB2010Express です。
よろしくお願いいたします。 
投稿者 るきお  (社会人) 投稿日時 2011/11/24 13:07:51
たとえば、プロジェクトにクラスを新規追加してその中に書きます。

調べる手順はSub Mainだからといって特別なことはなく、Webで「Sub Main」と検索して情報を収集したり、MSDNライブラリや書籍の該当箇所を読んだりすることになります。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2011/11/24 13:34:03
> Sub Main をどこに作成するのかが
任意のクラスやモジュール内に記述できます。

ただし、Main をクラス内で定義する場合は Public Shared として宣言し、
モジュール内で定義する場合は Public として宣言する必要があります。


たとえば、
Module モジュール名
  Public Sub Main()

  End Sub
End Module

あるいは
Class クラス名  'Form1 等でも OK 
  Public Shared Sub Main()

  End Sub
End Class

などといった記述になります。


あとはこの中でさらに、フォームの表示などといった処理を行ってやれば OK です。
(通常は、Application.Run というメソッドを利用してフォームを表示させます。)


また、俗に「Sub Main」とは呼ばれていますが、実際には「Function Main」として
宣言することも可能です。使用可能なパターンは以下の 4 種類です。
 Sub Main() 
 Sub Main(ByVal CmdArgs() As String) 
 Function Main() As Integer 
 Function Main(ByVal CmdArgs() As String) As Integer 


以下、参考資料として。
http://www.atmarkit.co.jp/fdotnet/dotnettips/524vb2005main/vb2005main.html
http://www.atmarkit.co.jp/fdotnet/dotnettips/030cmdargs/cmdargs.html
http://dobon.net/vb/dotnet/programing/makeentrypoint.html
http://dobon.net/vb/dotnet/form/notopenform.html
http://msdn.microsoft.com/ja-jp/library/ms235406%28vs.80%29.aspx