2012-07-08 16 views
5

Witam muszę się nauczyć VB.net do nowej pracy wcześniej jako facet C#. Właśnie natknąłem się na interesującą funkcję VB.net. Mogę odwoływać się do obiektów na drugim formularzu, który nie został zainicjowany!odniesienia nieużywane obiekty w vb.net

Więc z Form1 mogę dostać właściwość text textBox1 na Form2 następująco

Dim txt As String = Form2.TextBox1.Text 

Może ktoś wyjaśnić, jak to działa? Czy wszystkie formy są inicjowane na początku programu, a następnie ich widoczność jest włączana przez cały czas trwania programu?

+0

możliwe duplikat [występuje domyślne przykład formy w VB.NET ale nie w C#, dlaczego?] (Http://stackoverflow.com/questions/4698538/there-is-a-default-instance-of -form-in-vb-net-but-not-in-c-why) –

Odpowiedz

6

Formularze w VB są szczególnym przypadkiem. Kompilator generuje silnie wpisaną listę formularzy w przestrzeni nazw My.Forms object z zakresu My. Każda forma jest ujawniona jako własność My.Forms.TheNameOfTheForm. Te właściwości zawsze zwracają poprawne instancje - to znaczy, jeśli formularz nie został utworzony wcześniej, będzie używany po pierwszym użyciu właściwości.

Jak dotąd, tak dobrze.

Firma Microsoft domyślnie podjęła decyzję dotyczącą importu właściwości obiektu My.Forms (!), wszędzie, gdzie jest i nic nie można zrobić. Na pozór jest to ze względu na kompatybilność wsteczną z VB6, ale to nonsens, ponieważ VB7 (.NET 1.0) nie ma tej funkcji, pojawił się dopiero później.

Ale tylko w celu wyjaśnienia:

Czy wszystkie formy instatiated na początku programu ...?

Nie, na szczęście nie. Tworzone są one przy pierwszym dostępie do nieruchomości.

+0

+1. Ale Microsoft ** ** dodał funkcję kompatybilności wstecznej z VB6. Brakowało ich od pierwszego VB.Net, ale dodali więcej funkcji w następnych kilku wersjach, aby zwiększyć kompatybilność wsteczną. – MarkJ

+0

Warto również zauważyć, że formularz zostanie automatycznie uruchomiony ponownie, gdy odwołasz się do właściwości, nawet po ustawieniu odniesienia na nic. – MarkJ

+0

To sprawia, że ​​konwersja z VB6 jest bardzo łatwa, ale wymaga szczególnej ostrożności od programisty, aby NIE używać tej funkcji przez pomyłkę. –