Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
グローバル変数について
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30496#CommentId83990
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2020/5/25 17:17:30
付け加えるとすれば、
> Dim f As New Form2
> f.ShowDialog()
というコードも適切ではありません。正しくは下記のように書くべきです。
Using
f
As
New
Form2()
f.ShowDialog()
End
Using
Show の場合は、子フォームが閉じられた時に、子フォームのインスタンスも Dispose されます。
しかし ShowDialog の場合、子フォームが Close メソッドや呼ばれたり、
右上閉じるボタンが押されたとしても、単に非表示になるだけで
インスタンスは残り続けます。
そのため、インスタンスを生成した側で、明示的に Dispose しなければならないのです。
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.form.showdialog?view=netframework-4.8
>
> 非モーダルフォームとは異なり、Close メソッドは、ユーザーがダイアログボックスの
> [フォームを閉じる] ボタンをクリックしたとき、または DialogResult プロパティの値を
> 設定したときに .NET Framework によって呼び出されません。 代わりに、フォームは
> 非表示になり、ダイアログボックスの新しいインスタンスを作成せずに再び表示できます。
>
> ダイアログボックスとして表示されるフォームは、Closed ではなく非表示になるため、
> アプリケーションでフォームが不要になったときに、フォームの Dispose メソッドを
> 呼び出す必要があります。
>
VB6 の場合も、Unload しただけではそのフォームのインスタンスは残り続けており、
フィールド変数に引き続きアクセスできましたよね?
内部事情的は少々異なっていますが、それと似たような話だと思ってください。
http://www.gizcollabo.jp/vbtomo/log/archive/vbqanda_30162_0.html
https://www.nda.co.jp/memo/event_vb6.html