プロが教えるわが家の防犯対策術!

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

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

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

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

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

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

フォームがウィンドウ画面から確認できない状態になるとアプリが終了する仕様になってしまったのでしょうか。
また、この現象を回避し、起動時にフォームを非表示にする方法があればお教えください。

A 回答 (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をキャッチするので(当然だけど)、
そこはコントロールしてね!
    • good
    • 0

今回記述されているコードだけでは 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
    • good
    • 0

ふ~ん。

そうなの?
聖帝れおです。

フォームの設定はloadではアレだな。駄目。
質問者が何をしたいのか知らないが、入門本は何冊所持してます?(笑)

loadイベントより早いトコにコードを書く必要とか。さ。

コードエディターを表示し、クラス名からformを選択
メソッド名ボックスから[New]を選択

public sub new()

'この呼び出しは、,,,,
以下略

InitializeComponent()
'ここのトコにコードを書くようにする

End Sub

ま、ぼくは今、VisualBasicは休憩中だけどね。
じゃ^^/
    • good
    • 0
この回答へのお礼

御返事ありがとうございます。

当然、ロードイベント前に走る、NEWイベントは承知しています。

そこにもロードイベント同様、試してみたのですが、結果は変わらずでした。

お礼日時:2010/02/21 01:26

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が表示できますよ ^^
    • good
    • 0
この回答へのお礼

早速のご返答ありがとうございます。

>アプリ終了時の FormClosedやForemClosingなどのイベントが走っているのでしょうか
上記についてですが、実際やってみたところ、FormClosedイベントが走っていました。

試した方法としては、フォームのプロパティ設定により、
WindowState = WindowState.Minimized
ロードイベント内に
me.visible = false
を記述して実行しました。

お礼日時:2010/02/19 20:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A