CLR: .Net / Mono / Boo / Otros CLR > VB .NET

 Error al abrir una forma en Windows Form

(1/2) > >>

ricklopezz:
Que tal amigos, tengo un problema que me trae muy cortito. Estoy haciendo una aplicacion en NET, que muestra una lista en un DatagridView. Lo que necesito es que al seleccionar un registro de la lista con doble click, se abra una forma y se llenen automaticamente los datos del registro seleccionado. Ademas necesito que no permita abrir la forma FrmAltaRegistros mas de una vez. Lo hice de esta manera.


  Private Sub dtaGridView_CellMouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dtaGridView.CellMouseDoubleClick
        Call Carga_Forma_Datos(dtaGridView.SelectedRows)
    End Sub


    Private Sub Carga_Forma_Datos(ByVal oRows As DataGridViewSelectedRowCollection)
        Dim ChildForm As FrmAltaRegistros
        'Barremos las formas que hay en el parent para encontrar la referencia
        For Each f As Form In Me.MdiChildren
            If TypeOf f Is FrmAltaRegistros Then
                childForm = CType(f, FrmAltaRegistros)
                Exit For
            End If
        Next
        'Si la encontró ya no necesita la instancia solo la mostramos
        If Not (ChildForm Is Nothing) Then
            ChildForm.Show()
            ChildForm.Focus()
        Else
            'No se ha creado por lo tanto generamos la instancia
            ChildForm = New FrmAltaRegistros
            ChildForm.MdiParent = MDISanfer
            ChildForm.Show()
            Call ChildForm.Carga_RegistroSeleccionado(oRows)
            ChildForm.Focus()
        End If
    End Sub


Me manda un error de: No se controló Win32Exception - Error al identificador de ventana. Este error lo manda exactamente al momento de hacer el ChildForm.Focus


Espero, puedan apoyarme. Gracias.

Nebire:
Hola.

No he mirado a fondo tu código (no utilizas etiquetas para presentarlo ordenadamente, y resulta incómodo de leer), pero he visto algunas cosas.

el error lo puedes corregir fácilmente las esplicaciones en el código:

--- Código: Visual Basic --- ' elimina estas líneasChildForm.MdiParent = MDISanferChildForm.Focus() ' y cambia está línea:ChildForm.Show()' por esta otraChildForm.ShowDialog()  


Te comento alguna cosa...
Si tienes un formulario llamado FrmAltaRegistros, entonces puedes crear instancias de él, sin perder tiempo dando vueltas a la farola.

--- Código: vb.net --- Private Sub Carga_Forma_Datos(ByVal oRows As DataGridViewSelectedRowCollection)  Dim ChildForm As FrmAltaRegistros      set ChildForm = new FrmAltaRegistros   ' Creamos una instancia de un objeto que sabemos que existe..    ChildForm.showdialog     ' lo mostramos y si quieres lo mueves de posición...    Call ChildForm.Carga_RegistroSeleccionado(oRows)    ' ejecutas lo que se supone que hace..End sub    ' si tienes dudas acerca de si el formulario existe, puedes envolverlo en un condicional    if FrmAltaRegistros  isnot nothing then       set ChildForm = new FrmAltaRegistros                              ChildForm.showdialog                                              Call ChildForm.Carga_RegistroSeleccionado(oRows)     else       messagebox.show ("imposible crear una instancia del formulario FrmAltaRegistros, no tienes establecida una referencia..."   end if   ' también podrías hacerlo como un intento...Try     set ChildForm = new FrmAltaRegistros                         ChildForm.showdialog                                                Call ChildForm.Carga_RegistroSeleccionado(oRows)   Catch ex as exception       messagebox.show ex.messagefinnally    ' .........     end try  

ricklopezz:
Que tal, muchas gracias. Segui las instrucciones que mencionas, ya no aparece el error, pero no funciona conforme lo necesito.

Te comento.  La funcion Carga_RegistroSeleccionado Se encarga de llenar los combobox y demas datos de la forma frmAltaRegistros con los datos que se estaban desplegando en el datagridview.

Con los cambios que mencionas, el frmaltaregistros.showdialog, activa la forma, pero no regresa a ejecutar el Carga_RegistroSeleccionado hasta que no la cierro. Y lo que necesito es que la abra y llene los campos. Ojala puedan ayudarme.


Saludos

Nebire:
OK.

entonces cambia el showdialog por sólo show.
Dado que lo tenías como un FrmChild pensé que realmente querías mandarle el foco una vez abierto.

Con show tras terminar el evento load del formulario regresa a la siguiente instrucción tras frm.show

y por favor quita esa coletilla de 'ojalá puedan ayudarme', a mi me resulta injurioso... que todo el que entre diga lo mismo, la ayuda no depende del ojalá, ni de pedirlo con más o menos vehemencia. Depende de factores humanos exclusivamente, tiempo libre, ganas de dedicar tu tiempo libre, planteamiento del problema (por ejemplo si no fueras novato con tu código sin etiquetar no me hubiera molestado en responder), etc... pero no porque alguien pida algo de rodillas se le atiende, a mi, antes bien, me ofende como ser humano ver que otro se arrastre como un gusano, no es necesario.

ricklopezz:
Gracias por lo que respecta a la ayuda que pretendiste dar, pero que en lo particular no me funcionó. Tuve que hacerlo de otra manera que publicaré más adelante para gente que tenga el mismo problema.

Por otra parte, me molesto mucho tu comentario. En ningun momento te suplique o te solicite algo de rodillas, a ti ni a nadie de éste foro de apoyo, si eso te pareció creo que estas muy mal de tu cabeza y te falta muchisimo enfoque. No te consideres un maestro, ya que te falta muchisima humildad para lograrlo. Lo unico bueno que tienes es un ego que desborda, dime de que presumes y te diré de que careces. Deberias mirarte en un espejo para ver que tienes o que has logrado.

Espero que anteriormente ya te hayan mandado a la goma y muy lejos, sino es asi, lamento en verdad ser el primero.

Saludos

Ricardo

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa