[解決済み] VB.netの開閉フォーム
質問
私は2つのフォームを持つVBプログラムを持っており、私はそれぞれのフォームのフォームロードをコード化しました。
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MessageBox.Show("I AM FORM 1")
End Sub
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MessageBox.Show("I AM FORM 2")
End Sub
Form1 と Form2 を切り替えるには、ボタンを使用します。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.Hide()
Form1.Show()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Me.Hide()
Form2.Show()
End Sub
しかし、フォームを切り替えるたびに、フォームロードイベントは一度しかトリガーされません。私のコードに何か問題があるのでしょうか?Me.Hide()は前のフォームを隠すだけで、完全に閉じないのではと思います。前のフォームを閉じて、再び開くときにフォームロードイベントが再びトリガーされるようにしたいのです。
どのように解決するのですか?
<ブロッククオートしかし、フォームを切り替えるたびに、フォームロードイベントは一度しかトリガーされません。私のコードに何か問題があるのでしょうか?Me.Hide() は前のフォームを隠すだけで、完全に閉じないのではと思います。
まさにこの通りです。その
Hide
メソッドは、ただ
を隠す
を表示し、フォームを見えなくします。
探しているのは
Close
メソッド
で、実際にフォームを閉じます。(フォームを表示するために
Show
メソッドを呼び出す必要はありません。
Dispose
.)
しかし、フォームを閉じて、そのメソッドでコードを実行し続けることはできません。そこで、イベントハンドラ関数の記述順序を逆にして、もう一方のフォームを表示する必要があります まず をクリックし、自分自身を閉じます。こんな感じにしてください。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Form1.Show()
Me.Close()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Form2.Show()
Me.Close()
End Sub
これで思い通りになります。その
Load
を呼び出すたびにイベントが発生します。
Show
メソッドで新しいフォームを作成し、表示しているからです。
しかし、VB.NETの珍しい特性を利用していることは指摘に値します。後方互換性の理由から、古いVB言語から残しているものです。VB.NETでは オブジェクト のフォームクラスを (他のすべてのクラスオブジェクトと同じように) 参照しています。 タイプ という名前(クラスの名前そのもの)を使います。これは本当にやってはいけないことで、さまざまな頭痛の種になり、コードを読む人を混乱させることになります。このように、単に新しいフォームオブジェクトをインスタンス化する方がよいでしょう。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim frm As New Form1 ' create a new Form1 object
frm.Show() ' ... and display it
Me.Close()
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim frm As New Form1 ' create a new Form2 object
frm.Show() ' ... and display it
Me.Close()
End Sub
このコードを実行すると、すぐに別の問題にぶつかるでしょう。
Form1
アプリケーション全体が終了してしまいます。これは、新しいプロジェクトではデフォルトで
Form1
は、プロジェクトのプロパティ(ソリューションエクスプローラーの "My Project" )で "Startup form" として指定されています。どちらかにする必要があります。
- を作成します。 サード フォームをメインフォームとして使用し、quot;Startup form"をこの第3のフォームに設定するか、または
- シャットダウンモード("マイプロジェクト"にもあります)を、"スタートアップフォームが閉じたとき"から"最後のフォームが閉じたとき"に変更します。
関連
-
[解決済み] Microsoft Access Database FileのC:㊧Employees.accdbが認識されないのですが?
-
[解決済み] 1つまたは複数の必須パラメータに値が指定されていない
-
[解決済み] public subの呼び出し時に、非共有メンバーの参照にオブジェクト参照が必要となる
-
[解決済み] VB.NETで<DllImport>を使用するには?
-
[解決済み] "文字列 "" から型 'Double' への変換は無効です。" VBでは
-
[解決済み] VB.netでの遅延
-
[解決済み] vb.netで2つのタイムスパン間の時差を取得する
-
[解決済み] VB.NETにおけるDirectCast()とCType()の違いについて
-
[解決済み] YesNoCancel付きMessageBox - NoとCancelが同じイベントをトリガーする
-
[解決済み] 複数のURLを同時にダウンロードするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] public subの呼び出し時に、非共有メンバーの参照にオブジェクト参照が必要となる
-
[解決済み] NUnit TestCaseのパラメータとして二重引用符をエスケープするにはどうすればよいですか?
-
[解決済み] VB.NETで<DllImport>を使用するには?
-
[解決済み] 文字列をダブルに変換する - VB
-
[解決済み] VB.NETで画像のリサイズをする
-
[解決済み] VB.NET: FormClosing()を中止する
-
[解決済み] インデックスが配列の範囲外であった
-
[解決済み] VB.NETで文字列を比較する
-
[解決済み] オブジェクト参照がオブジェクトのインスタンスに設定されていない [重複] 。
-
[解決済み] vbLf、vbCrLf、vbCrの定数の違いについて