2012-07-08 13 views
5

こんにちは私は以前はC#の男だった新しい仕事のためのVB.netを習得しています。私はVB.netの興味深い機能を紹介します。私はinstatiatedされていない2番目のフォームでオブジェクトを参照することができます!vb.netでuninstansiatedオブジェクトを参照してください

Dim txt As String = Form2.TextBox1.Text 

誰もこれがどのように動作するかを説明することができますが、次のようにForm1のiからは、Form2の上のTextBox1のTextプロパティを取得することができますか?すべてのフォームがプログラムの開始時に開始されていますか?そして、プログラムのライフサイクル全体を通して可視性が切り替わりますか?

+0

可能な複製[VB.Netではフォームの既定のインスタンスがありますが、C#ではありません](http://stackoverflow.com/questions/4698538/there-is-a-default-instance-of -form-in-vb-net-but-in-c-why) –

答えて

6

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

これまでのところ、とても良いです。

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

しかし、単に明確にする:

は、プログラムの開始時にinstatiatedすべての形態でありますか...?

いいえ、運良くはありません。これらのプロパティは、プロパティに初めてアクセスしたときにインスタンス化されます。

+0

+1。しかし、Microsoft **は、VB6との下位互換性のためにこの機能を追加しました。彼らは最初のVB.Netからそれを見逃していましたが、後方互換性を高めるために、次の2つのバージョンでより多くの機能を追加しました。 – MarkJ

+0

また、参照を何も設定しなくても、プロパティを参照するときにフォームが自動的に再インスタンス化されることには注意してください。 – MarkJ

+0

これはVB6からの変換を非常に簡単にしますが、誤ってこの機能を使用しないようにプログラマから特別な注意を払っています。 –

関連する問題