Principales respuestas
propiedades de una clase

Pregunta
-
hola hice una pregunta sobre esto pero no encontre la solucion y pregunte de nuevo pero no me contestaron, el tema es el siguiente tengo dos formulario uno factura y otro cliente, tambien tengo una clase llamada encabezadofactura con tres propiedades. en el formulario factura tengo un boton para buscar un cliente en ese boton instancio la clase y abro el formulario cliente que tambien en este instancio la clase para cargarles las propiedades con los datos del cliente y en el boton buscar del formulario factura cuando instancio la clase que ya la nombre antes quiero llenar las cajas de textos del formulario factura con las propiedades de la clase pero no me trae nada, entonces como hago para que en el formulario factura me cargue las cajas de textos con los datos de las propiedades de la clase que ya las tengo cargadas en el formulario cliente.
gaston
Respuestas
-
Efectivamente, la causa es la misma: Cuando haces "dim factura as new formfactura", lo que haces es crear una nueva instancia del formulario, que no es la instancia que estabas viendo en pantalla. Los datos se los metes a esta última, y por eso en la otra copia que hay en pantalla no se ve nada. De hecho, podrías hacer factura.Show() y en ese momento se vería en pantalla esta segunda copia del formulario (además de la primera). Tus datos serían visibles dentro de esta segunda ventana.
- Marcado como respuesta tato25 viernes, 13 de diciembre de 2013 14:02
Todas las respuestas
-
Tú mismo casi casi has contestado la pregunta al decir "...en ese botón instancio la clase..." y luego "... también en este instancio la clase ..." Esto implica que tienes dos instancias de la clase. Cada instancia es independiente de la otra y tiene su propio almacenamiento separado para guardar datos. Por lo tanto, lo que metes dentro de una instancia no se ve en la otra. Por eso en la segunda clase "no te trae nada". Necesitarás instanciar la clase en un único sitio, y una vez instanciada y cargada de datos, pasarle esa misma instancia a la otra clase. No vale con crear una nueva instancia en la otra clase.
-
Tú mismo casi casi has contestado la pregunta al decir "...en ese botón instancio la clase..." y luego "... también en este instancio la clase ..." Esto implica que tienes dos instancias de la clase. Cada instancia es independiente de la otra y tiene su propio almacenamiento separado para guardar datos. Por lo tanto, lo que metes dentro de una instancia no se ve en la otra. Por eso en la segunda clase "no te trae nada". Necesitarás instanciar la clase en un único sitio, y una vez instanciada y cargada de datos, pasarle esa misma instancia a la otra clase. No vale con crear una nueva instancia en la otra clase.
hola alberto yo instancio la clase en el formulario cliente y cargo los datos de esta forma :
Dim encabezado As New Claseencabezadofactura
encabezado.nombrecliente = Me.TextBox2.Text
encabezado.apellidocliente = Me.TextBox3.Text
encabezado.direccioncliente = Me.TextBox4.Text
bien ahora como hago para pasar esas propiedades de la clase en la cajas de textos del formulario factura en donde en el boton buscar yo abro el formulario cliente e instancio la clase de nuevo y vos decis que esta mal pero probe instanciarla con la instancia encabezado pero no me sale la clase esa no se si me explico bien
gaston
-
Cuando en el formulario cliente haces Dim encabezado As New Claseencabezadofactura, eso declara una variable local que desaparece en cuanto sales del método que la creó. Por lo tanto, no hay ninguna forma de recuperar esos datos desde el formulario de factura a no ser que previamente copies esa variable a algún sitio en el que el formulario factura pueda recuperarla.
Una forma sencilla (pero no muy elegante) de conseguirlo consiste en declararla como variable "Shared" dentro del formulario Cliente (dentro de la propia clase, no vale dentro de un método de la clase):
Public class Cliente Inherits Form
Public Shared Encabezado As Claseencabezadofactura
Private Sub Boton_Click(...)
Encabezado = New Claseencabezadofactura
Encabezado.nombrecliente = Me.TextBox2.Text
Encabezado.apellidocliente = Me.TextBox3.Text
Encabezado.direccioncliente = Me.TextBox4.Text
End Sub
...
End ClassDespués, dentro de Factura, accedes a ella escribiendo Cliente.Encabezado.
Si quieres hacerlo de forma más elegante, sin usar una variable global, puedes pasársela al formulario Factura en el momento de instanciarlo desde Cliente por mediación de su constructor o de una propiedad pública dentro de Factura.
- Editado Alberto PoblacionMVP jueves, 12 de diciembre de 2013 6:36
-
Cuando en el formulario cliente haces Dim encabezado As New Claseencabezadofactura, eso declara una variable local que desaparece en cuanto sales del método que la creó. Por lo tanto, no hay ninguna forma de recuperar esos datos desde el formulario de factura a no ser que previamente copies esa variable a algún sitio en el que el formulario factura pueda recuperarla.
Una forma sencilla (pero no muy elegante) de conseguirlo consiste en declararla como variable "Shared" dentro del formulario Cliente (dentro de la propia clase, no vale dentro de un método de la clase):
Public class Cliente Inherits Form
Public Shared Encabezado As Claseencabezadofactura
Private Sub Boton_Click(...)
Encabezado = New Claseencabezadofactura
Encabezado.nombrecliente = Me.TextBox2.Text
Encabezado.apellidocliente = Me.TextBox3.Text
Encabezado.direccioncliente = Me.TextBox4.Text
End Sub
...
End ClassDespués, dentro de Factura, accedes a ella escribiendo Cliente.Encabezado.
Si quieres hacerlo de forma más elegante, sin usar una variable global, puedes pasársela al formulario Factura en el momento de instanciarlo desde Cliente por mediación de su constructor o de una propiedad pública dentro de Factura.
hola alberto de nuevo perdona que sea medio duro para comprender te cuento en el formulario cliente en el boton salir para que vuelva de nuevo al formulario factura hice lo siguiente:
Private Sub BTNSALIR_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BTNSALIR.Click
Dim encabezado As New Claseencabezadofactura
encabezado.nombrecliente = Me.TextBox2.Text
encabezado.apellidocliente = Me.TextBox3.Text
encabezado.direccioncliente = Me.TextBox4.Text
Formfactura.TextBox2.Text = encabezado.nombrecliente
Formfactura.TextBox3.Text = encabezado.apellidocliente
Formfactura.TextBox4.Text = encabezado.direccioncliente
Me.Close()
End Sub
y ahi si me trajo los datos del cliente, creo que de esta forma esta bien, pero igual sigo sin entender para que sirven las clase y porque tambien declarando una instancia del formulario factura en este mismo boton no me trae nada que seria asi la otra forma que te digo
Private Sub BTNSALIR_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BTNSALIR.Click
Dim encabezado As New Claseencabezadofactura
dim factura as new formfacturaencabezado.nombrecliente = Me.TextBox2.Text
encabezado.apellidocliente = Me.TextBox3.Text
encabezado.direccioncliente = Me.TextBox4.Text
factura.TextBox2.Text = encabezado.nombrecliente
factura.TextBox3.Text = encabezado.apellidocliente
factura.TextBox4.Text = encabezado.direccioncliente
Me.Close()
End Subasi de esta forma no carga nada en el formulario factura pero de la otra forma si carga los datos, creo que debe ser igual de lo que me explicaste al principio.
saludos
gaston
-
Efectivamente, la causa es la misma: Cuando haces "dim factura as new formfactura", lo que haces es crear una nueva instancia del formulario, que no es la instancia que estabas viendo en pantalla. Los datos se los metes a esta última, y por eso en la otra copia que hay en pantalla no se ve nada. De hecho, podrías hacer factura.Show() y en ese momento se vería en pantalla esta segunda copia del formulario (además de la primera). Tus datos serían visibles dentro de esta segunda ventana.
- Marcado como respuesta tato25 viernes, 13 de diciembre de 2013 14:02
-
Efectivamente, la causa es la misma: Cuando haces "dim factura as new formfactura", lo que haces es crear una nueva instancia del formulario, que no es la instancia que estabas viendo en pantalla. Los datos se los metes a esta última, y por eso en la otra copia que hay en pantalla no se ve nada. De hecho, podrías hacer factura.Show() y en ese momento se vería en pantalla esta segunda copia del formulario (además de la primera). Tus datos serían visibles dentro de esta segunda ventana.
Muchas gracias por tu explicacion ahora estoy entendiendo un poco mas
Saludos
gaston