2012-07-08 8 views
5

Hola, tengo que aprender VB.net para un nuevo trabajo después de haber sido un tipo C#. Acabo de encontrar una característica interesante de VB.net. ¡Puedo hacer referencia a objetos en una segunda forma que no ha sido instalada!objetos de referencia de desinstalación en vb.net

Así que desde Form1 puedo conseguir la propiedad de texto de TextBox1 en Form2 de la siguiente manera

Dim txt As String = Form2.TextBox1.Text 

Puede alguien explicar cómo funciona esto? ¿Se instalan todos los formularios al comienzo del programa y luego se alterna su visibilidad a lo largo de la vida útil del programa?

+0

posible duplicado de [Hay una instancia predeterminada de formulario en VB.Net pero no en C#, ¿POR QUÉ?] (Http://stackoverflow.com/questions/4698538/there-is-a-default-instance-of -form-in-vb-net-but-not-in-c-why) –

Respuesta

6

Las formas en VB son un caso especial. El compilador genera una lista de formularios fuertemente tipada en el My.Forms object del espacio de nombres My. Cada formulario está expuesto como una propiedad My.Forms.TheNameOfTheForm. Estas propiedades siempre devuelven instancias válidas, es decir, si un formulario no se ha instanciado anteriormente, lo hará cuando use la propiedad por primera vez.

Hasta ahora, todo bien.

Pero Microsoft también hizo la muerte cerebral (!) La decisión de importar las propiedades del objeto My.Forms por defecto, todas partes, y no hay nada que puedas hacer. Superficialmente, esto es por razones de compatibilidad con versiones anteriores de VB6, pero eso no tiene sentido ya que VB7 (.NET 1.0) no tenía esta característica, solo vino después.

Pero sólo para aclarar:

¿Son todas las formas instatiated al inicio del programa ...?

No, por suerte no. Se crean instancias la primera vez que accede a la propiedad.

+0

+1. Pero Microsoft ** agregó ** la función para compatibilidad con versiones anteriores de VB6. Lo perdieron desde el primer VB.Net, pero agregaron más funciones en las siguientes dos versiones para aumentar la compatibilidad con versiones anteriores. – MarkJ

+0

También vale la pena señalar que el formulario volverá a iniciarse automáticamente cuando haga referencia a una propiedad, incluso después de haber establecido la referencia a nada. – MarkJ

+0

Esto hace que la conversión de VB6 sea muy fácil, pero solo tiene un cuidado especial por parte del programador para NO usar esta característica por error. –

Cuestiones relacionadas