VB.NET Form1、Form2の相互参照 | |
|
VB.NET Form1、Form2の相互参照2
Form1でForm2を起動して、Form2からForm1をForm1からForm2を参照する方法を
紹介します。
仕様
・Form1でForm2を起動する、Form2が既に起動している場合は、フォーカスを当てる。
・Form2からForm1のテキストボックスに書き込みをする。 ・Form1からForm2のテキストボックスに書き込みをする。 ・Form2が閉じられても再度Form1から起動可能なこと。 ・Form1が閉じられるとForm2も閉じられること。 外観
VB.NET Form1のコード
Public Class Form1
さてForm2を起動するForm1側のコードであるが、注意点が幾つかあります。
F2はForm2のインスタンスで・F2 = New Form2(Me)で作成されることは既にご存知であると思われる。 引数Meに関しては追い追い説明しよう。 難しいのは、Form2が一旦起動されて、Form2側で閉じられ再度起動する時のコードです。 フォームを閉じると言うことは、フォームの右上のxでフォームを閉じると言うことである、念のために。 フォームが閉じられると、Disposeが呼び出されF2は破棄されますが、Form1側では参照がまだ 残っています、そこで既にF2がDisposeされたか否かを以下の行のOrElse以降で見ています。 ・If F2 Is Nothing OrElse F2.IsDisposed = True Then F2 Is NothingはF2が一度も起動されていない時はTrueになり、F2.IsDisposedはF2が破棄された 場合にTrueになる。 すなわちF2が一度も作成されていないか又は破棄された場合は、新しいF2を作成しているのである。 又F2のテキストボックスに書き込む場合も同様のチェックをしている。 次に ・ F2 = New Form2(Me) ですが一見あまり見たことが無いMeが引数に付いています、 これがForm1のインスタンスMeをを引数にしてF2に渡しているところである。 どのように渡るかは以下のForm2のコードをご覧下頂きたい。
Form2側のコードの表示
VB.NET Form2側のコード
Public Class Form2
・Public Sub New(ByVal fomForm1 As Form1)
Sub Newはフォームのインスタンスが作される時必ず呼び出され、更にForm1で 起動時に渡した、Form1のインスタンスも引数で 渡ってきます。 ・Form1 = fomForm1 さらに渡ってきたForm1のインスタンスを、Form2で宣言したForm1のインスタンスF1に 代入しています。 これででForm1のインスタンスF1にアクセスが出来ます。 (download)上記コードのダウンロード
(注意)
このFormに関する記事はVB2003をベースに書かれています。
VB2005になってFormの仕様が大きく変わり、又元のVB6の様にエディターで置くだけで、 どのフォームからも参照できる様になりました。 これはデフォルトインスタンスを言って、エディターが自動的にインスタンスを作成します。 つまりForm2をエディターで置いてForm1上でForm2.Visivle = True とすると、Form2が表示されます。 又Form1上のテキストボックスTextBox1に「Hello!」と書き込むにはForm1.TextBox1.Text="Hello!" とすれば良いのです。 何のことは有りません、VB6と同じになったのです。 VB.NETに慣れたFormも単純なクラスであると理解している人には、Formは複雑です。 VB6から移行した人には、極めて単純です。 もちろん今までの方法も使用できます、念の為に。 ただしこれには賛否両論があります、私は中立です。 |