5

こんにちは、以前は C# を使っていましたが、新しい仕事のために VB.net を学ばなければなりません。VB.net の興味深い機能を見つけました。インスタンス化されていない 2 番目のフォームのオブジェクトを参照できます。

したがって、Form1 から、次のように Form2 の textbox1 のテキスト プロパティを取得できます。

Dim txt As String = Form2.TextBox1.Text

誰でもこれがどのように機能するか説明できますか? プログラムの開始時にすべてのフォームが開始され、その後、プログラムの存続期間中、それらの可視性が切り替えられますか?

4

1 に答える 1

6

VB のフォームは特殊なケースです。コンパイラは、名前空間のMy.Formsオブジェクトで厳密に型指定されたフォームのリストを生成し ます。My各フォームはプロパティとして公開されますMy.Forms.TheNameOfTheForm。これらのプロパティは常に有効なインスタンスを返します。つまり、フォームが以前にインスタンス化されていない場合は、プロパティを最初に使用したときにインスタンス化されます。

ここまでは順調ですね。

My.Formsしかし、Microsoft は、デフォルトでオブジェクトからプロパティをインポートするという脳死の (!) 決定も行いました。表面的には、これは VB6 との下位互換性の理由によるものですが、VB7 (.NET 1.0) にはこの機能がなく、後で登場したため、これはナンセンスです。

しかし、明確にするために:

プログラムの開始時にすべてのフォームが設​​定されていますか?

いいえ、幸いなことに違います。これらは、プロパティに初めてアクセスしたときにインスタンス化されます。

于 2012-07-08T11:18:55.170 に答える