none
Pasar Clase como parámetro entre formularios RRS feed

  • Pregunta

  • Buenas Tardes a todos...

    De nuevo recurro a su valiosa ayuda, para que me den una idea del porque tengo el siguiente error:

    Explico sobre mi proyecto... Tengo Dos formularios (Un formulario MDI, y un formulario normal)... ademas, he creado una clase, con los datos que voy a transferir del MDI al otro Formulari... la clase es esta:

    Public Class Datos
        'Esta clase contiene los datos a mostrar de donde el ciudadano le toca votar
        Private CodRef As String
        Private Nombre As String
        Private Dpi As String
        Private Lugar As String
        Private Direccion As String
        Private Mesa As String
        Private PagLinea As String
    
        Public Sub New()
            MyBase.New()
            ' TODO: Complete member initialization 
            'InitializeComponent()
        End Sub
    
        Public Sub New(ByVal CodRef As String, ByVal Nombre As String, ByVal Dpi As String, ByVal Lugar As String, ByVal Direccion As String,
                       ByVal Mesa As String, ByVal PagLinea As String)
    
            Me.CodRef = CodRef
            Me.Nombre = Nombre
            Me.Dpi = Dpi
            Me.Lugar = Lugar
            Me.Direccion = Direccion
            Me.Mesa = Mesa
            Me.PagLinea = PagLinea
    
        End Sub
    
        Public Property CodigoRef() As String
    
            Get
                Return CodRef
            End Get
    
            Set(ByVal value As String)
                CodRef = value
            End Set
    
        End Property
    
        Public Property NombreCiudadano() As String
    
            Get
                Return Nombre
            End Get
    
            Set(ByVal value As String)
                Nombre = value
            End Set
    
        End Property
    
        Public Property DpiCui() As String
    
            Get
                Return Dpi
            End Get
    
            Set(ByVal value As String)
                Dpi = value
            End Set
    
        End Property
    
        Public Property LugarVota() As String
    
            Get
                Return Lugar
            End Get
    
            Set(ByVal value As String)
                Lugar = value
            End Set
    
        End Property
    
        Public Property DirVota() As String
    
            Get
                Return Direccion
            End Get
    
            Set(ByVal value As String)
                Direccion = value
            End Set
    
        End Property
    
        Public Property MesaVota() As String
    
            Get
                Return Mesa
            End Get
    
            Set(ByVal value As String)
                Mesa = value
            End Set
    
        End Property
    
        Public Property PagLineaVota() As String
    
            Get
                Return PagLinea
            End Get
    
            Set(ByVal value As String)
                PagLinea = value
            End Set
    
        End Property
    
    End Class
    

    En el Formulario Hijo, tengo esto...

    Private DatosVota As Datos
    
        Public Sub New()
            MyBase.New()
            'This call is required by the Windows Form Designer. 
            InitializeComponent()
            'Add any initialization after the InitializeComponent() call 
    
        End Sub
    
        Public Sub New(ByVal DatosDondeVota As Datos)
            Me.New()
            Me.DatosVota = DatosDondeVota
        End Sub

    En el Formulario MDI tengo lo siguiente:

    Dim DatosVota As New Datos
    DatosVota.CodigoRef = ds.Tables("VOTANTES").Rows(0)("NroBoleta").ToString
    DatosVota.NombreCiudadano = ds.Tables("VOTANTES").Rows(0)("Nombre").ToString
    DatosVota.DpiCui = ds.Tables("VOTANTES").Rows(0)("Cui").ToString
    
    Dim Frm As New FrmDatos
    Frm.ShowDialog(DatosVota)
    Frm.Dispose()

    Los datos de la clase los lleno todos... pero aquí por razón de espacio, solamente presente unos cuantos.

    Es en la linea: 

    Frm.ShowDialog(DatosVota)

    En donde me dice el error: InvalidCastException Occurred

    No se puede convertir un objeto de tipo 'Donde_Votas_CP2018.Datos' al tipo 'System.Windows.Forms.IWin32Window'.

    Me podrian dar una mano con este problema por favor....

    Gracias por todo.

    miércoles, 7 de marzo de 2018 19:50

Respuestas

  • Estás pasando el dato en el sitio equivocado. Tal como has diseñado la clase, tienes previsto pasarlo en el constructor, pero lo estás pasando en el ShowDialog, que es una función de sistema que no entiende nada de tu clase datos.

    Dim DatosVota As New Datos
    DatosVota.CodigoRef = ds.Tables("VOTANTES").Rows(0)("NroBoleta").ToString
    DatosVota.NombreCiudadano = ds.Tables("VOTANTES").Rows(0)("Nombre").ToString
    DatosVota.DpiCui = ds.Tables("VOTANTES").Rows(0)("Cui").ToString
    
    Dim Frm As New FrmDatos(DatosVota)
    Frm.ShowDialog()
    Frm.Dispose()

    • Marcado como respuesta wichortiz jueves, 8 de marzo de 2018 12:55
    miércoles, 7 de marzo de 2018 21:55

Todas las respuestas

  • Estás pasando el dato en el sitio equivocado. Tal como has diseñado la clase, tienes previsto pasarlo en el constructor, pero lo estás pasando en el ShowDialog, que es una función de sistema que no entiende nada de tu clase datos.

    Dim DatosVota As New Datos
    DatosVota.CodigoRef = ds.Tables("VOTANTES").Rows(0)("NroBoleta").ToString
    DatosVota.NombreCiudadano = ds.Tables("VOTANTES").Rows(0)("Nombre").ToString
    DatosVota.DpiCui = ds.Tables("VOTANTES").Rows(0)("Cui").ToString
    
    Dim Frm As New FrmDatos(DatosVota)
    Frm.ShowDialog()
    Frm.Dispose()

    • Marcado como respuesta wichortiz jueves, 8 de marzo de 2018 12:55
    miércoles, 7 de marzo de 2018 21:55
  • Excelente respuesta Alberto... muy agradecido con tu persona por resolverme el inconveniente....

    Gracias a todos.

    jueves, 8 de marzo de 2018 12:54