none
propiedades de una clase RRS feed

  • 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

    martes, 10 de diciembre de 2013 14:41

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
    viernes, 13 de diciembre de 2013 6:42

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.

    miércoles, 11 de diciembre de 2013 6:41
  • 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

    jueves, 12 de diciembre de 2013 2:47
  • 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 Class

    Despué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.


    jueves, 12 de diciembre de 2013 6:35
  • 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 Class

    Despué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 formfactura

           encabezado.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 Sub

    asi 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

    viernes, 13 de diciembre de 2013 2:30
  • 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
    viernes, 13 de diciembre de 2013 6:42
  • 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

    viernes, 13 de diciembre de 2013 14:05