トップ回答者
Form2の起動方法について

質問
-
Form1からForm2を起動させる方法について
教えて頂きたく投稿しました。
Form2の重複起動を避けて、Form2をモーダルフォームとして起動させたいと思います。
Private Sub hoge() Dim f2 As Form2 If f2.Visible = False Then <-----(*1) f2 = New Form2(Me) f2.ShowDialog() Else f2.Activate() End If End Sub
(*1)のf2部位で、次のエラーメッセージが出ました。
警告 1 変数 'f2' は、値が割り当てられる前に使用されています。Null 参照の例外が実行時に発生する可能性があります。
多重起動防止には、この方法が良さそうに思えますが、他に良い方法がありますか。
Form2を閉じるには、Form2のclose()で閉じようと思います。 ← 何か対策をしておいた方が良いですか。
何卒、ご教示下さい。
よろしくお願いします。
回答
-
f2 での操作の結果、hoge 関数を呼べるルートがあるとまずいなぁと思って書いていました。
Me を渡していますが、間接的に hoge 関数を呼ばないようになっている のであれば、確かにそれでいいかもです。ただ、Dispose 漏れしているので、Using ステートメントを使う点は提案しておきたいと思います。
Private Sub hoge() Using f2 As New Form2(Me) f2.ShowDialog() End Using End Sub
- 回答としてマーク ひらぽんModerator 2013年6月5日 3:25
-
f2 は 1 度の hoge 関数の実行中でしか有効でなく、次の hoge 関数実行時には空の状態からスタートします。
つまり、あなたがやりたかったことが実現できていません。f2 をクラスのフィールド変数にする必要があるでしょう。
そして、初回は f2 が Nothing になっているので、まずは Nothing でないことを検証し、次に IsDisposed プロパティ、その次に Visible プロパティという検証が必要でしょう。- 回答としてマーク ひらぽんModerator 2013年6月5日 3:23
-
taokato さま よろしく。
Form1 が Public Class Form1 で Form2 が Public Class Form2 で書かれているものとして
Form1 の とあるイベントハンドラから次のコードで、モーダルフォームとして起動できると重います。
Form2.ShowDialog()
それだけで良いと思います。
あっ、Form2 から抜けるときは Form2.vb で Me.Close() です。
- 回答としてマーク ひらぽんModerator 2013年6月5日 3:25
すべての返信
-
f2 は 1 度の hoge 関数の実行中でしか有効でなく、次の hoge 関数実行時には空の状態からスタートします。
つまり、あなたがやりたかったことが実現できていません。f2 をクラスのフィールド変数にする必要があるでしょう。
そして、初回は f2 が Nothing になっているので、まずは Nothing でないことを検証し、次に IsDisposed プロパティ、その次に Visible プロパティという検証が必要でしょう。- 回答としてマーク ひらぽんModerator 2013年6月5日 3:23
-
taokato さま よろしく。
Form1 が Public Class Form1 で Form2 が Public Class Form2 で書かれているものとして
Form1 の とあるイベントハンドラから次のコードで、モーダルフォームとして起動できると重います。
Form2.ShowDialog()
それだけで良いと思います。
あっ、Form2 から抜けるときは Form2.vb で Me.Close() です。
- 回答としてマーク ひらぽんModerator 2013年6月5日 3:25
-
-
f2 での操作の結果、hoge 関数を呼べるルートがあるとまずいなぁと思って書いていました。
Me を渡していますが、間接的に hoge 関数を呼ばないようになっている のであれば、確かにそれでいいかもです。ただ、Dispose 漏れしているので、Using ステートメントを使う点は提案しておきたいと思います。
Private Sub hoge() Using f2 As New Form2(Me) f2.ShowDialog() End Using End Sub
- 回答としてマーク ひらぽんModerator 2013年6月5日 3:25