• 締切済み

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とすると、その場合もアプリが終了してしまいました。 また、タイマーイベント内にて、フォーム最小化、タスクバー非表示の方法を試してみても、アプリが終了する結果となりました。 フォームがウィンドウ画面から確認できない状態になるとアプリが終了する仕様になってしまったのでしょうか。 また、この現象を回避し、起動時にフォームを非表示にする方法があればお教えください。

みんなの回答

回答No.4

はじめまして 通りすがりです。 こんなやり方は邪道ですか?  1.form1の画面にボタン3つ テキストボックス1つを配置します。  2.form2の画面にテキストボックス1つ、ボタン1つ 配置します。 ソースは以下のように記述します。 ------------------------form1 source---------------------------------------  Public Class Form1 Private pf2 As Form2 'form2を生成 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim f2 As New Form2() 'form2を見えなくする。 f2.Formdisable(False) 'form2を表示 f2.Show() 'ボタン2,3とテキスト操作用 pf2 = f2 End Sub 'form2を見えなくする Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click pf2.Formdisable(True) End Sub 'form2を見えなくする。 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click pf2.Formdisable(False) End Sub 'form2が見えない場合も見えないだけであることのテスト Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged pf2.SetText1 = TextBox1.Text End Sub End Class --------------------------------form2 source---------------------- Public Class Form2 Public Sub Formdisable(ByVal ModeEnabled As Boolean) If ModeEnabled = False Then Me.Opacity = 0 Else Me.Opacity = 100 End If End Sub Public WriteOnly Property SetText1() Set(ByVal value) TextBox1.Text = value End Set End Property Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Close() End Sub End Class -----------------------ここまで-------------------------------- form2をクローズしてから、form1でform2を操作するとexceptionをキャッチするので(当然だけど)、 そこはコントロールしてね!

  • korin_
  • ベストアンサー率69% (46/66)
回答No.3

今回記述されているコードだけでは FormClosed イベントは起こらないので、 > dim str as string > dim f1 as new form1(str) > f1.showdaialog() 上記のコード以外にも何か記述されていますよね? その現象が再現できる最低限のソースコードを提示していただければ、解決方法がわかるかもしれません。 ちなみに私の環境(VB2008 Express)で下記のソースコードで実行した場合、アプリが終了するということはありませんでしたのでご参考までに。   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click     Dim str As String = ""     Dim frm As New Form2(str)     frm.ShowDialog()   End Sub   Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load     Me.WindowState = FormWindowState.Minimized     Me.ShowInTaskbar = False   End Sub

  • gcqd75ce
  • ベストアンサー率8% (6/67)
回答No.2

ふ~ん。そうなの? 聖帝れおです。 フォームの設定はloadではアレだな。駄目。 質問者が何をしたいのか知らないが、入門本は何冊所持してます?(笑) loadイベントより早いトコにコードを書く必要とか。さ。 コードエディターを表示し、クラス名からformを選択 メソッド名ボックスから[New]を選択 public sub new() 'この呼び出しは、,,,, 以下略 InitializeComponent() 'ここのトコにコードを書くようにする End Sub ま、ぼくは今、VisualBasicは休憩中だけどね。 じゃ^^/

sc040423
質問者

お礼

御返事ありがとうございます。 当然、ロードイベント前に走る、NEWイベントは承知しています。 そこにもロードイベント同様、試してみたのですが、結果は変わらずでした。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

Visibleプロパティを操作しただけで アプリが終了するというのは聞いたことがありませんよ アプリ終了時の FormClosedやForemClosingなどのイベントが走っているのでしょうか 単に 見えなくなってしまっているだけなのでは ? ATL+TABでウィンドウ切り替えなどを行ってもアプリは発見できないのでしょうか または タスクマネージャのプロセスタブを探してみるとか ・・・ VB2002以降は 起動時のFormが閉じられた場合にアプリが終了するようになっています これは Visibleプロパティの操作ではなく CloseメソッドまたはウィンドウのCloseボタンおよび ALT+F4などによりフォームを『閉じる』ことを言います NotyfyIconをFormに追加して Iconプロパティに何かICONを設定しておきます NotyfyIconのDoubleClickイベントなどで Me.Visible = True Me.WindowState = WindowState.Normal などを記述しておいて見てください こうしておけば タスクトレイのアイコンをダブルクリックするとFormが表示できますよ ^^

sc040423
質問者

お礼

早速のご返答ありがとうございます。 >アプリ終了時の FormClosedやForemClosingなどのイベントが走っているのでしょうか 上記についてですが、実際やってみたところ、FormClosedイベントが走っていました。 試した方法としては、フォームのプロパティ設定により、 WindowState = WindowState.Minimized ロードイベント内に me.visible = false を記述して実行しました。

関連するQ&A

専門家に質問してみよう