Foros del Web » Programación para mayores de 30 ;) » .NET »

Cargar formulartio dinamico por menu

Estas en el tema de Cargar formulartio dinamico por menu en el foro de .NET en Foros del Web. Hola: Resulta que tengo que cargar un menu dinamico y asu vez al momento de hacer click que se cargue el formulario perteneciente a cada ...
  #1 (permalink)  
Antiguo 08/04/2011, 08:05
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Cargar formulartio dinamico por menu

Hola:
Resulta que tengo que cargar un menu dinamico y asu vez al momento de hacer click que se cargue el formulario perteneciente a cada menu

tengo este metodo que va cargando los formularios por cada menu
Dim dt As New DataTable
Dim da As New SqlDataAdapter
'Ejecutando procedimiento para codigos de barra.
Dim cmd As New SqlCommand
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.CommandText = "SP_BUSCA_FORMULARIOS_X_MENU"
cmd.Connection = SQLcnn
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@RUT", RutUsuario)
cmd.Parameters.AddWithValue("@SISTEMA", CodigoSistema)
cmd.Parameters.AddWithValue("@MENU", NombreCabecera)
cmd.ExecuteNonQuery()
da = New SqlDataAdapter(cmd)
da.Fill(dt)
Dim vlim As Short = CShort(dt.Rows.Count - 1)
Dim vposi As Short
For vposi = 0 To vlim
mnuSubOpcion = New ToolStripMenuItem(Trim(dt.Rows(vposi).Item("DESCRI PCION").ToString()))
mnuSubOpcion.Tag = Trim(dt.Rows(vposi).Item("DESCRIPCION").ToString() )
mnuSubOpcion.Image = Imagen.Images(1)
mnuSubOpcion.TextAlign = ContentAlignment.TopCenter
NombreSubmenu = Trim(dt.Rows(vposi).Item("MENU").ToString())
mnuSubOpcion.ForeColor = Color.Blue
'Añadir Opcion
menuOpcion.DropDownItems.Add(mnuSubOpcion)
Next
AddHandler mnuSubOpcion.Click, AddressOf LevantaFormulario


*******

PERO RESULTA QUE AL MOMENTO DE LLAMAR AL EVENTO 'LEVANTA FORMULARIO' SOLO LLAMA AL ULTIMO FORMULARIO, NO SE COMO HACERLO PARA QUE AL MOMENTO DE HACERLE CLICK CARGUE EL FORM ADECUADO, A LO MEJOR AL MOMENTO DE AGREGAR EL FORMULARIO SE AGREGA UN INDICE.

QUIEN ME PUEDE DECIR COMO SOLUCIONAR ESTE PROBLEMA, O COMO USAR LOS INDICES.

GRACIAS
  #2 (permalink)  
Antiguo 08/04/2011, 08:56
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Cargar formulartio dinamico por menu

Hola Giufantasy lo que haces esta bien, solo lo que tendrias que hacer es controlar los formularios en cada evento al que seleccionas de esta manera :

Código vb.net:
Ver original
  1. Dim dt As New DataTable
  2. Dim da As New SqlDataAdapter
  3. 'Ejecutando procedimiento para codigos de barra.
  4. Dim cmd As New SqlCommand
  5. cmd.CommandType = Data.CommandType.StoredProcedure
  6. cmd.CommandText = "SP_BUSCA_FORMULARIOS_X_MENU"
  7. cmd.Connection = SQLcnn
  8. cmd.Parameters.Clear()
  9. cmd.Parameters.AddWithValue("@RUT", RutUsuario)
  10. cmd.Parameters.AddWithValue("@SISTEMA", CodigoSistema)
  11. cmd.Parameters.AddWithValue("@MENU", NombreCabecera)
  12. cmd.ExecuteNonQuery()
  13. da = New SqlDataAdapter(cmd)
  14. da.Fill(dt)
  15. Dim vlim As Short = CShort(dt.Rows.Count - 1)
  16. Dim vposi As Short
  17. For vposi = 0 To vlim
  18. mnuSubOpcion = New ToolStripMenuItem(Trim(dt.Rows(vposi).Item("DESCRI PCION").ToString()))
  19. mnuSubOpcion.Tag = Trim(dt.Rows(vposi).Item("DESCRIPCION").ToString() )
  20. mnuSubOpcion.Image = Imagen.Images(1)
  21. mnuSubOpcion.TextAlign = ContentAlignment.TopCenter
  22. NombreSubmenu = Trim(dt.Rows(vposi).Item("MENU").ToString())
  23. mnuSubOpcion.ForeColor = Color.Blue
  24. 'Añadir Opcion
  25. menuOpcion.DropDownItems.Add(mnuSubOpcion)
  26. 'Esto va dentro para que se asignen a todos, si lo pones fuera solo agrega al ultimo
  27. AddHandler mnuSubOpcion.Click, AddressOf LevantaFormulario
  28. Next

tu evento LevantaFormulario :
Código vb.net:
Ver original
  1. Public Sub LevantaFormulario()
  2.         'Extraigo el nombre del control seleccionado
  3.         Select Case Me.ActiveControl.Name.ToString
  4.             'Comparo si es igual a :
  5.             Case "form1"
  6.                 Dim x as new Form1
  7.                 x.Show()
  8.             Case "form2"
  9.                 Dim y as new Form2
  10.                 y.Show()
  11.         End Select
  12. End Sub

Trata de asignar nombres a tus subitems para que hagas la comparacion. Saludos!
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #3 (permalink)  
Antiguo 08/04/2011, 09:43
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Cargar formulartio dinamico por menu

Gracias por responder, mira esto tengo en el levantaFormulario

Dim Formulario As String
Dim wSTproyecto As String = System.Reflection.Assembly.GetExecutingAssembly.Ge tName.Name
abrirConexion()
conectaSQL()

Dim da As SqlDataAdapter
Dim dt4 As New DataTable
Dim cmd As New SqlCommand
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.CommandText = "SP_CARGA_FORMULARIO"
cmd.Connection = SQLcnn
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@MENU", NombreSubmenu)
cmd.Parameters.AddWithValue("@DESCRIPCION", mnuSubOpcion.Tag)
cmd.ExecuteNonQuery()
da = New SqlDataAdapter(cmd)
da.Fill(dt4)
If dt4.Rows.Count > 0 Then
Formulario = dt4.Rows(0).Item(0)
Dim ensamblado As [Assembly] = [Assembly].GetExecutingAssembly()
Dim f As Form = ensamblado.CreateInstance(wSTproyecto + "." + Formulario, True)
f.ShowDialog()
End If
cerrarConexion()
Exit Sub

en este evento cargo el formulario por el menu y descripcion
como dices tu que tengo que hacer para que reconozco el formulario que estoy cargando
  #4 (permalink)  
Antiguo 08/04/2011, 09:55
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Cargar formulartio dinamico por menu

lo otro amigo Aquaventus al momento de pasar por el Me.ActiveControl.Name.ToString me sale el error "Referencia a objeto no establecida como instancia de un objeto".
No se como sacar ese error o a que se refiere si solo se esta activando el control.
?????

Gracias por tu ayuda
  #5 (permalink)  
Antiguo 08/04/2011, 09:57
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Cargar formulartio dinamico por menu

veo que tienes este codigo

Código vb.net:
Ver original
  1. NombreSubmenu = Trim(dt.Rows(vposi).Item("MENU").ToString())

agregalo de esta manera :
Código vb.net:
Ver original
  1. NombreSubmenu = Trim(dt.Rows(vposi).Item("MENU").ToString())
  2. mnuSubOpcion.name = NombreSubmenu

y luego en tu metodo LevantaFormulario lo harias asi :

Código vb.net:
Ver original
  1. Dim Formulario As String
  2. Dim wSTproyecto As String = System.Reflection.Assembly.GetExecutingAssembly.Ge tName.Name
  3. abrirConexion()
  4. conectaSQL()
  5.  
  6. Dim da As SqlDataAdapter
  7. Dim dt4 As New DataTable
  8. Dim cmd As New SqlCommand
  9. cmd.CommandType = Data.CommandType.StoredProcedure
  10. cmd.CommandText = "SP_CARGA_FORMULARIO"
  11. cmd.Connection = SQLcnn
  12. cmd.Parameters.Clear()
  13. cmd.Parameters.AddWithValue("@MENU", NombreSubmenu)
  14. cmd.Parameters.AddWithValue("@DESCRIPCION", mnuSubOpcion.Tag)
  15. cmd.ExecuteNonQuery()
  16. da = New SqlDataAdapter(cmd)
  17. da.Fill(dt4)
  18. If dt4.Rows.Count > 0 Then
  19. Formulario = dt4.Rows(0).Item(0)
  20. Dim ensamblado As [Assembly] = [Assembly].GetExecutingAssembly()
  21. 'Aqui extraes el nomre del formulario que se guardo en el nombre del control
  22. Dim f As Form = ensamblado.CreateInstance(wSTproyecto + "." + Me.ActiveControl.Name.ToString, True)
  23. f.ShowDialog()
  24. End If
  25. cerrarConexion()
  26. Exit Sub

Lo pruebas y me cuentas. Saludos!
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #6 (permalink)  
Antiguo 08/04/2011, 09:58
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Cargar formulartio dinamico por menu

"Me.ActiveControl.Name.ToString" extrae el nombre del control al cual se hizo alguna accion como por ejemplo cuando creas botones dinamicos y agregas un metodo com handler como lo hize arriba es averigua segun el handler relacionado a cierto control, una vez obtenido el control extraigo el nombre al cual se referencio, si creé 3 botones a los cuales les agrege el mismo handler (btnAgregar,btnEliminar y btnmodificar) y le hize clic al boton btnAgregar me obtiene su nombre que es "btnAgregar".
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #7 (permalink)  
Antiguo 08/04/2011, 10:12
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Cargar formulartio dinamico por menu

mm ahora que veo bien tu codigo creo que no iria con mi codigo, que quedaria algo asi:

Código vb.net:
Ver original
  1. Dim Formulario As String
  2. Dim wSTproyecto As String = System.Reflection.Assembly.GetExecutingAssembly.Ge tName.Name
  3. Dim ensamblado As [Assembly] = [Assembly].GetExecutingAssembly()
  4. 'Aqui extraes el nomre del formulario que se guardo en el nombre del control
  5. Dim f As Form = ensamblado.CreateInstance(wSTproyecto + "." + Me.ActiveControl.Name.ToString, True)
  6. f.ShowDialog()
  7. Exit Sub
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #8 (permalink)  
Antiguo 08/04/2011, 11:06
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Sonrisa Respuesta: Cargar formulartio dinamico por menu

amigo Aquantus, hice lo que me dijiste, pero sucede que al momento de Levantar el formulario

Dim da As SqlDataAdapter
Dim dt4 As New DataTable
Dim cmd As New SqlCommand
cmd.CommandType = Data.CommandType.StoredProcedure
cmd.CommandText = "SP_CARGA_FORMULARIO"
cmd.Connection = SQLcnn
cmd.Parameters.Clear()
cmd.Parameters.AddWithValue("@MENU", NombreSubmenu)
cmd.Parameters.AddWithValue("@DESCRIPCION", mnuSubOpcion.Tag)
cmd.ExecuteNonQuery()
da = New SqlDataAdapter(cmd)
da.Fill(dt4)
If dt4.Rows.Count > 0 Then
Formulario = dt4.Rows(0).Item(0)
Dim ensamblado As [Assembly] = [Assembly].GetExecutingAssembly()
'Aqui extraes el nomre del formulario que se guardo en el nombre del control
Dim f As Form = ensamblado.CreateInstance(wSTproyecto + "." + Me.ActiveControl.Name.ToString, True)
f.ShowDialog()
Exit Sub

End If

los parametros NombreSubmenu y mnuSubOpcion.Tag que le paso al Procedimiento almacenado ya van con el ultimo formulario cargado y lo otro que el Active control me sigue dando error "Referencia a objeto no establecida como instancia de un objeto."

que puedo hacer?

Gracias nuevamente por tu ayuda...
  #9 (permalink)  
Antiguo 08/04/2011, 11:27
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Cargar formulartio dinamico por menu

mmm se me hace raro que te bote esa linea de codigo un error... yo lo ando probando y no tengo problemas... crea un boton y en su evento click colocale MessageBox.Show(Me.ActiveControl.Name.ToString) para que veas...
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #10 (permalink)  
Antiguo 08/04/2011, 11:53
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Cargar formulartio dinamico por menu

puede set porque el Private Sub LevantaFormulario(ByVal sender As System.Object, ByVal e As System.EventArgs) es un metodo que cree yo, porque en el diseñador lo unicoq eu tengo es el MenuStrip y nada mas, cargo el menu, y luego por cada menu cargo los formularios...
Pero aun me da el error y no he podido sacarlo

como lo puedo hacer amigo Aquaventus

Gracias
  #11 (permalink)  
Antiguo 08/04/2011, 11:53
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Cargar formulartio dinamico por menu

Giufantasy Ya analizando mejor tu codigo creo que ya comprendi toda tu logica, por tanto me parece que debe quedar asi :

Código vb.net:
Ver original
  1. Dim dt As New DataTable
  2. Dim da As New SqlDataAdapter
  3. 'Ejecutando procedimiento para codigos de barra.
  4. Dim cmd As New SqlCommand
  5. cmd.CommandType = Data.CommandType.StoredProcedure
  6. cmd.CommandText = "SP_BUSCA_FORMULARIOS_X_MENU"
  7. cmd.Connection = SQLcnn
  8. cmd.Parameters.Clear()
  9. cmd.Parameters.AddWithValue("@RUT", RutUsuario)
  10. cmd.Parameters.AddWithValue("@SISTEMA", CodigoSistema)
  11. cmd.Parameters.AddWithValue("@MENU", NombreCabecera)
  12. cmd.ExecuteNonQuery()
  13. da = New SqlDataAdapter(cmd)
  14. da.Fill(dt)
  15. Dim vlim As Short = CShort(dt.Rows.Count - 1)
  16. Dim vposi As Short
  17. For vposi = 0 To vlim
  18. mnuSubOpcion = New ToolStripMenuItem()
  19. mnuSubOpcion.Text = Trim(dt.Rows(vposi).Item("DESCRI PCION").ToString())
  20. mnuSubOpcion.Tag = Trim(dt.Rows(vposi).Item("DESCRIPCION").ToString() )
  21. mnuSubOpcion.Image = Imagen.Images(1)
  22. mnuSubOpcion.TextAlign = ContentAlignment.TopCenter
  23. NombreSubmenu = Trim(dt.Rows(vposi).Item("MENU").ToString())
  24. mnuSubOpcion.Name = TNombreSubMenu
  25. mnuSubOpcion.ForeColor = Color.Blue
  26. 'Añadir Opcion
  27. menuOpcion.DropDownItems.Add(mnuSubOpcion)
  28. AddHandler mnuSubOpcion.Click, AddressOf LevantaFormulario
  29. Next

Código vb.net:
Ver original
  1. Dim Formulario As String
  2. Dim wSTproyecto As String = System.Reflection.Assembly.GetExecutingAssembly.Ge tName.Name
  3. abrirConexion()
  4. conectaSQL()
  5.  
  6. Dim da As SqlDataAdapter
  7. Dim dt4 As New DataTable
  8. Dim cmd As New SqlCommand
  9. cmd.CommandType = Data.CommandType.StoredProcedure
  10. cmd.CommandText = "SP_CARGA_FORMULARIO"
  11. cmd.Connection = SQLcnn
  12. cmd.Parameters.Clear()
  13. cmd.Parameters.AddWithValue("@MENU", Me.ActiveControl.Name.ToString)
  14. cmd.Parameters.AddWithValue("@DESCRIPCION", Me.ActiveControl.Text)
  15. cmd.ExecuteNonQuery()
  16. da = New SqlDataAdapter(cmd)
  17. da.Fill(dt4)
  18. If dt4.Rows.Count > 0 Then
  19. Formulario = dt4.Rows(0).Item(0)
  20. Dim ensamblado As [Assembly] = [Assembly].GetExecutingAssembly()
  21. Dim f As Form = ensamblado.CreateInstance(wSTproyecto + "." + Formulario, True)
  22. f.ShowDialog()
  23. End If
  24. cerrarConexion()
  25. Exit Sub

Sino te funciona el "Me.ActiveControl..." es muy raro... debe faltar algo..... xq yo lo uso normal sin ningun problema...
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #12 (permalink)  
Antiguo 08/04/2011, 11:54
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Cargar formulartio dinamico por menu

no hagas caso a este mensaje escribí algo de mas....XD y tuve que editarlo :).

PDT: Regreso en 1 hora, me voy a mi hora de almuerzo... ya regresoo..
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #13 (permalink)  
Antiguo 08/04/2011, 12:01
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Cargar formulartio dinamico por menu

Para el Me.ActiveControl habra que hacer alguna referencia o algo parecido, instanciarlo??

atento a tu respuesta
  #14 (permalink)  
Antiguo 08/04/2011, 13:09
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Cargar formulartio dinamico por menu

pues veo que no ninguna referencia... en todo sino tienes teamviewer 6 lo descargas aqui y una vez que lo inicias me dices tu id y tu password a mi correo para verlo remotamente y solucionar tu problema.

PDT: mi correo es [email protected]
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #15 (permalink)  
Antiguo 08/04/2011, 13:52
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Cargar formulartio dinamico por menu

Listo el correo... lo envie
  #16 (permalink)  
Antiguo 08/04/2011, 14:22
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: Cargar formulartio dinamico por menu

Si hay alguien que sepa de "Me.ActiveControl.Name.ToString" porque en VS2003 bota "Referencia a objeto no establecida como instancia de un objeto" y en VS2008 no hay problemas, por favor nos comenta de manera que ayuda a Giufantasy y libera dudas. Saludos!
Giufantasy trabaja con el VS 2003.
PDT: Giufantasy si logras solucionarlo nunca olvides postear la solucion. Saludos !
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #17 (permalink)  
Antiguo 08/04/2011, 14:40
 
Fecha de Ingreso: octubre-2009
Mensajes: 63
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Cargar formulartio dinamico por menu

Gracias por tu ayuda Aquaventus, Tratare de realizarlo en visual studio 2005
si logro hacerlo, publico la solucion

Etiquetas: dinamico
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:22.