Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ezugaru

#1
Resuelto, el problema se generaba porqueel NameSpace que obtuve por alguna razon era incorrecto, al usar el  MsgBox(Me.GetType().Namespace) obtuve el namespace correcto, y me di cuenta que me falta un guion bajo, y ya con eso funciono como debe, llamandome al Form que ya tenia hecho en modo de diseño. Anexo foto :D



Gracias a todos :D por echar un vistazo.

El codigo lo resumo, y solo estoy usando 4 lineas:



Dim frmToOpen As Form = Activator.CreateInstance(Type.GetType("SysROCAR_1._0." & frmName))

                frmToOpen = DirectCast(frmToOpen, Form)

                frmToOpen.MdiParent = Me

                frmToOpen.Show()

#2
Cita de: raul338 en 15 Junio 2010, 00:09 AM
hubiera sido mas facil poner solo el codigo necesario.

Nunca vi la funcion DynamicallyLoadedObject, pero aca entraria perfecto el tutorial de refelction que hizo nuestro amigo danger Introduccion a System.Reflection

Leelo y nos cuentas ;)

De hecho antes de postear vi ese tuto, sin embargo, aun no llegan a lo que estoy usando que es el manejo de tipos (Type) y a parecer ese es mi problema, ya que cuanod declaro el tipo y trato de obtener el namespace junto con el form que quiero llamar, la variable de Type sale vacía, por eso es que no funciona, y es lo que ando tratando de resolver, he visto en otros foros, el msdn, pero hay mucho que me cuesta entender y otro poco que no es lo que necesito (al menos eso creo) por eso hice el post , a ver si alguien con conocimientos mas avanzados me podía orientar al respecto.
#3
 :-(
Que tal amigos? fijense que ando desarrollando una aplicacion con menús dinámicos en VB.Net , los menús me corren de maravilla, sin embargo mi problema viene en la conversion de el nombre del frm que se obtiene de la base de datos en tipo cadena a un objeto de tipo form que pueda usarse para invocar el formulario correcto.

Encontré varios códigos en internet, pero ninguno me ha funcionado, el que actualmente estoy trabajando es este:


Imports MySql.Data
Imports MySql.Data.MySqlClient
Imports System
Imports System.Reflection
Imports Microsoft.VisualBasic.CallType


Public Class Main

   Public user, idrol, iuseraccessmode As String

   Dim consulta As String
   Dim con As New MySqlConnection
   Dim comando As New MySqlCommand
   Dim adaptador As New MySqlDataAdapter
   Dim lector As MySqlDataReader
   Dim datos As New DataTable
   Dim mnMenu As MenuStrip

   Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

       LoginForm1.Close()
       'MsgBox(iuseraccessmode)

       con = New MySqlConnection
       con.ConnectionString = "server = 192.168.1.3;" & "user = zzzzzzzz;" & "password = xxxxxxxxx;" & "database = xxxxxx;"

       Try

           con.Open()

           consulta = "Select menutext from menumaster Where mainmenu = 0" & _
                  " And menuid in (Select menuid from acceso Where idrol =" & _
                   CInt(iuseraccessmode) & ") " & _
                   "And isActive = 1"
           comando.Connection = con
           comando.CommandText = consulta
           lector = comando.ExecuteReader

           If lector.HasRows Then

               mnMenu = New MenuStrip

               While lector.Read()

                   mnMenu.Items.Add(lector(0).ToString, Nothing, New System.EventHandler(AddressOf MainMenu_OnClick))
                   Me.Controls.Add(mnMenu)

               End While
           End If

           lector.Close()

       Catch ex As Exception

           MsgBox("El siguiente error fue detectado: " & ex.Message.ToString, MsgBoxStyle.Critical)

       End Try

       con.Close()

   End Sub

   Private Sub MainMenu_OnClick(ByVal sender As Object, ByVal e As System.EventArgs)
       Dim cms As New ContextMenuStrip()
       Dim sMenu() As String
       con = New MySqlConnection
       con.ConnectionString = "server = 192.168.1.3;" & "user = xxxxxxxx;" & "password = xxxxxxxx;" & "database = xxxxxxxx;"

       Try

           con.Open()

           consulta = "Select menuid from menumaster Where menutext = '" & sender.ToString & "'"
           comando.Connection = con
           comando.CommandText = consulta
           lector = comando.ExecuteReader

           Dim parentMenuID As Integer

           If lector.HasRows Then
               lector.Read()
               parentMenuID = lector("menuid")
           End If
           lector.Close()

           consulta = "Select menutext from menumaster Where mainmenu ='" & _
            parentMenuID & " '" & _
            "And isActive = 1" & _
            " And MenuID in (" & _
            "Select menuid from acceso Where idrol =" & _
            CInt(iuseraccessmode) & ")" & _
            " Order BY MenuOrder"
           comando.Connection = con
           comando.CommandText = consulta
           lector = comando.ExecuteReader

           ReDim Preserve sMenu(0)
           Dim i As Integer
           If lector.HasRows Then
               ReDim Preserve sMenu(0)
               i = 0
               While lector.Read()
                   ReDim Preserve sMenu(i)
                   sMenu(i) = lector("menutext")
                   i = i + 1
               End While
           End If
           lector.Close()
           For Each sMn As String In sMenu
               cms.Items.Add(sMn, Nothing, New System.EventHandler(AddressOf SelectedChildMenu_OnClick))
           Next
           Dim tsi As ToolStripMenuItem = CType(sender, ToolStripMenuItem)
           tsi.DropDown = cms
           tsi.ShowDropDown()

       Catch ex As Exception

           MsgBox("El siguiente error fue detectado: " & ex.Message.ToString, MsgBoxStyle.Critical)

       End Try

       con.Close()

   End Sub

   Private Sub SelectedChildMenu_OnClick(ByVal sender As Object, ByVal e As System.EventArgs)
       
       Dim frmName As String
       'Dim frm As New Form

       con = New MySqlConnection
       con.ConnectionString = "server = 192.168.1.3;" & "user = xxxxxxxxx;" & "password = xxxxxxxxx;" & "database = xxxxxxx;"

       Try

           con.Open()
           consulta = "Select formname from menumaster Where menutext = '" & _
           sender.ToString & "'"
           comando.Connection = con
           comando.CommandText = consulta
           lector = comando.ExecuteReader

           If lector.HasRows Then

               lector.Read()
               frmName = lector(0).ToString
               lector.Close()

               Dim frm As Form = DynamicallyLoadedObject(frmName)
               frm.MdiParent = Me
               frm.Show()


           Else

               MsgBox("Under Construction", MsgBoxStyle.Exclamation, "Technical Error")

           End If

       Catch ex As Exception

           MsgBox("El siguiente error fue detectado: " & ex.Message.ToString, MsgBoxStyle.Critical)

       End Try

       con.Close()

   End Sub

   Private Function DynamicallyLoadedObject(ByVal objectName As String, _
       Optional ByVal args() As Object = Nothing) As Form
       Dim returnObj As Object = Nothing
       Dim Type As Type = Assembly.GetExecutingAssembly().GetType( _
           "SysROCAR." & objectName)
       If Type IsNot Nothing Then
           returnObj = Activator.CreateInstance(Type, args)
       End If
       Return returnObj
   End Function

End Class



Al darle click al menu que quiero abrir me manda el error: "Referencia a objeto no establecida como instancia de un objeto".

El problema empieza en la funion SelectedChildMenu_OnClick la cual manda un parametro a la funcion DynamicallyLoadedObject quien se encarga de el ensamblado de la cadena a objeto. Espero alguien pueda ayudarme porque ya me siento frustrado ... saludos.
#4
Soy yo de nuevo, sigo vivo !!!! ya casi temino el sistema :D solo estoy terminando lo que son pedidos y devoluciones con sus respectivos reportes y estará terminado, una vez hecho así subo la solucion del proyecto para todo aquel que quiera checarla, y pueda ya sea tomar parte de lo que hice o bien, corregirme y ayudarme a mejorar mi modo de programar, saludos!
#5
.NET (C#, VB.NET, ASP) / Re: Problema con While
25 Septiembre 2009, 19:58 PM
porque exactamente no entendia muy bien como hacer eso que pones ... gracias!!!!!!!!
#6
.NET (C#, VB.NET, ASP) / Problema con While
25 Septiembre 2009, 19:03 PM
Hola a todos, estoy desarrollando una aplicacion relativamente sencilla pero hay un while que no me responde como yo espero, el código es este:
Dim respuesta As Char
                           respuesta = UCase(InputBox("¿Desea eliminar la clave definitivamente? S=Elimina definitivamente la clave. N=Elimina solo la marca de esa clave", "Responda S ó N"))


                           While (respuesta <> "S" Or respuesta <> "N")

                               respuesta = UCase(InputBox("Respuesta no aceptada. ¿Desea eliminar la clave definitivamente? S=Elimina definitivamente la clave. N=Elimina solo la marca de esa clave"))

                               If respuesta = Nothing Then

                                   Eliminar.Enabled = False
                                   id_prd.Text = Nothing
                                   descripcion.Text = Nothing
                                   id_cat.Text = Nothing
                                   marca.Text = Nothing
                                   existencia.Text = Nothing
                                   p_lista.Text = Nothing
                                   id_prd.Focus()

                                   MsgBox("Baja de artículo cancelada.", MsgBoxStyle.Exclamation)

                                   Exit While

                               End If

                           End While

El problema es que se supone que si el usuario ingresa S o N el while deberia terminar y pasar a la siguiente sentencia de control que es un IF, sin embargo aun poniendo la S o la N el while no termina, ya he probado pasando msgboxes en el while para ver que la variable reciba correctamente el parametro y efectivamente el msgbox me devuelv S o N asi que no se que pueda ser ya le di vueltas y no se que pueda ser ... ayuda por favor.
#7
Resuelto, jaja, voy a ir poniendo aqui como estoy solucionando estos detalles por si a alguien le pasa lo mismo pues se de una idea que le pasa, no creo que sea el uinico que tenga éstos problemas, resulta que yo le añadía en la vista de diseño las columnas al Datagrid y al parecer eso ocasionaba algun conflicto al momento de pasar el datatable al datagrid, y pues dejo que el datatable le ponga las comunas con los nombres de las columnas al datagrid, el codigo queda asi:



Private Sub id_prd_KeyDown(ByVal sender As System.Object, ByVal e As KeyEventArgs) Handles id_prd.KeyDown

        If e.KeyCode = Keys.Enter Then

            con = New MySqlConnection
            con.ConnectionString = "server = 192.168.1.151;" & "user = root;" & "password = 18281e78a8;" & "database = rocar;"

            Try

                con.Open()
                consulta = "select id_prd from inventario where id_prd ='" & id_prd.Text & "'"
                comando.Connection = con
                comando.CommandText = consulta
                adaptador.SelectCommand = comando

                If adaptador.Fill(datos) = Nothing Then

                    MsgBox("Clave no encontrada, verificala")
                    id_prd.Text = Nothing
                    id_prd.Focus()

                Else

                    consulta = "SELECT DISTINCT inventario.id_prd,inventario.descripcion,marcas.marca,marcas.cantidad,marcas.precio_lista FROM inventario,marcas WHERE inventario.id_prd='" & id_prd.Text & "' AND marcas.id_prd='" & id_prd.Text & "'"

                    comando.Connection = con

                    comando.CommandText = consulta

                    adaptador.SelectCommand = comando

                    datos.Clear()

                    adaptador.Fill(datos)

                    consulta_dgv.DataSource = datos
                    id_prd.Text = Nothing
                    id_prd.Focus()

                End If

            Catch ex As Exception

                MsgBox("Se produjo el siguiente error: " & ex.Message)

            End Try

            con.Dispose()

        End If

    End Sub



Y tambien agregue una busqueda por descripcion, por ejemplo si quieren buscar todos los articulos de un auto en especifico, digamos una urvan, un tsuru, un cirrus, solo ponen la palabra en el textbox y la busqueda se ejecuta buscando todas las coincidencias posibles:



Private Sub describe_KeyDown(ByVal sender As System.Object, ByVal e As KeyEventArgs) Handles describe.KeyDown

        If e.KeyCode = Keys.Enter Then

            con = New MySqlConnection
            con.ConnectionString = "server = 192.168.1.151;" & "user = root;" & "password = 18281e78a8;" & "database = rocar;"

            Try

                con.Open()

                consulta = "SELECT inventario.id_prd,inventario.descripcion,marcas.marca,marcas.cantidad,marcas.precio_lista from inventario,marcas WHERE inventario.descripcion LIKE '%" & describe.Text & "%' AND inventario.id_prd=marcas.id_prd"
                comando.Connection = con
                comando.CommandText = consulta
                adaptador.SelectCommand = comando
                datos.Clear()

                If adaptador.Fill(datos) = Nothing Then

                    MsgBox("Descripcion no encontrada, usa otra palabra")
                    describe.Text = Nothing
                    describe.Focus()

                Else

                    consulta_dgv.DataSource = datos
                    describe.Text = Nothing
                    id_prd.Focus()

                End If

            Catch ex As Exception

                MsgBox("Se produjo el siguiente error: " & ex.Message)

            End Try

            con.Dispose()

        End If

    End Sub



cualquier sugerencia o comentario será muy bien recibido.
#8
ok, aqui voy de nuevo . . .  ya ando en otro form programando las consultas de productos, pero al querer llenar la grilla no manda nada, queda en blanco y no se que pasa, este codigo es el que siempre he usado, pero poa alguna razon ahora no hace efecto, se los pongo:


Imports MySql.Data
Imports MySql.Data.MySqlClient
Imports System

Public Class consulta_productos

    Dim lector As MySqlDataReader
    Dim con As New MySqlConnection
    Dim comando As New MySqlCommand
    Dim adaptador As New MySqlDataAdapter
    Dim consulta, consulta2 As String
    Dim datos As New DataTable
    Dim DS As New DataSet

    Private Sub id_prd_KeyDown(ByVal sender As System.Object, ByVal e As KeyEventArgs) Handles id_prd.KeyDown

        If e.KeyCode = Keys.Enter Then

            con = New MySqlConnection
            con.ConnectionString = "server = 192.168.1.151;" & "user = root;" & "password = 18281e78a8;" & "database = rocar;"

            Try

                con.Open()
                consulta = "SELECT id_prd from inventario where id_prd='" & id_prd.Text & "'"
                comando.Connection = con
                comando.CommandText = consulta
                adaptador.SelectCommand = comando

                If adaptador.Fill(datos) = Nothing Then

                    MsgBox("Clave no encontrada, verificala")
                    id_prd.Text = Nothing
                    id_prd.Focus()

                Else

                    consulta2 = "SELECT DISTINCT inventario.id_prd,inventario.descripcion,marcas.marca,marcas.cantidad,marcas.precio_lista FROM inventario,marcas WHERE inventario.id_prd='" & id_prd.Text & "' AND marcas.id_prd='" & id_prd.Text & "'"
                    MsgBox(consulta2)
                    comando.Connection = con
                    comando.CommandText = consulta2
                    adaptador.SelectCommand = comando

                    Me.consulta_dgv.DataSource = adaptador.Fill(datos)


                    id_prd.Text = Nothing
                    id_prd.Focus()

                    'End While

                End If

            Catch ex As Exception

                MsgBox("Se produjo el siguiente error: " & ex.Message)

            End Try

            datos.Reset()
            con.Dispose()
            consulta = Nothing

            id_prd.Text = Nothing
            id_prd.Focus()

        End If

    End Sub
End Class

#9
Olvidenlo, ya encontre el error, analizando el codigo con Pollo me di cuentsa que el Handler del evento tenia dos veces el argumento de el text box, por eso aunque le daba un solo enter lo ejecutaba dos veces, seguramente manejando el visual del form clique sin darme cuenta



Private Sub cantidad_TextChanged(ByVal sender As System.Object, ByVal e As KeyEventArgs) Handles cantidad.KeyDown, cantidad.KeyDown




Elimine el ultimo cantidad.KeyDown , quedando:



Private Sub cantidad_TextChanged(ByVal sender As System.Object, ByVal e As KeyEventArgs) Handles cantidad.KeyDown




Y ya funka como debe . . . sorry pero entré en pánico
#10
Les pongo todo más detallado, aquí está el código de el cantidad_textchanged textbox que es donde creo esta el error >.< :


Private Sub cantidad_TextChanged(ByVal sender As System.Object, ByVal e As KeyEventArgs) Handles cantidad.KeyDown, cantidad.KeyDown

        resultado = Nothing

        If e.KeyCode = Keys.Escape Then

            id_prd.Text = Nothing
            existencia.Text = Nothing
            descripcion.Text = Nothing
            p_unitario.Text = Nothing
            id_prd.Text = Nothing
            cantidad.Text = Nothing
            marca_txt.Text = Nothing
            id_prd.Focus()

        Else

            If e.KeyCode = Keys.Enter Then

                'Asignamos valores a las variables para checar la cantidad existente con la que se quiere vender

                MsgBox(existencia.Text)

                c2 = cantidad.Text
                c1 = existencia.Text

                If c1 <= 0 Then

                    MsgBox("No hay inventario")
                    cantidad.Text = Nothing
                    p_unitario.Text = Nothing
                    descripcion.Text = Nothing
                    existencia.Text = Nothing
                    id_prd.Text = Nothing
                    id_prd.Focus()

                Else

                    If c1 < c2 Then

                        MsgBox("No puedes vender más de " & c1 & " piezas.")
                        cantidad.Text = Nothing
                        cantidad.Focus()

                    Else

                        If c1 >= c2 Then

                            'MsgBox("El enter funka! Cantidad: " & cantidad.Text)


                            'Agregamos los datos de los textboxes a el DGview

                            resultado = p_unitario.Text * cantidad.Text

                            venta_dgv.Rows.Add(id_prd.Text, descripcion.Text, marca_txt.Text, cantidad.Text, p_unitario.Text, resultado)

                            'comienza codigo de recorrido de datagrid para insertar datos en textbox

                            suma_col = Nothing

                            Dim iTotal As Integer = Me.venta_dgv.Rows.Count
                            Dim i As Integer

                            For i = 0 To iTotal - 1

                                suma_col = suma_col + Double.Parse(Me.venta_dgv(4, i).Value)

                            Next

                            Dim subt As Double = Nothing
                            Dim impto As Double = Nothing

                            subt = suma_col / 1.1
                            impto = suma_col - subt

                            total.Text = Format(suma_col, "$ #,##0.00")
                            iva.Text = Format(impto, "#,##0.00")
                            subtotal.Text = Format(subt, "#,##0.00")

                            'Termina código de recorrido de inserción de datos

                            id_prd.Text = Nothing
                            existencia.Text = Nothing
                            descripcion.Text = Nothing
                            p_unitario.Text = Nothing
                            id_prd.Text = Nothing
                            cantidad.Text = Nothing
                            marca_txt.Text = Nothing
                            id_prd.Focus()

                        End If

                    End If

                End If

            End If

        End If

    End Sub



Y acá les dejo unas imágenes de lo que pasa, al parecer, se ejecuta bien una vez el procedimiento, pero por alguna razón como que vuelve a entrar, y obviamente en ese momento ya vacié los contenidos de los textboxes y todos los contenidos estan vacios, les pongo imagenes de como me resulta:

Aqui sale todo bien, el msgbox me dice el contenido de existencia.text e inmediatamente despues hace la carga de la fila al DGView , lo que indica que está bien:


Ahora acá Se ve ya donde el DGView fue afectado y metió todos los datos, pero sorpresivamente el MSGbox salta de nuevo pero ahora sin ningun contenido ( cadena vacia) y no sé porque >.<:


Y de ahi con la cadena vacia obviamente salta el error:



Ayudaaaaa me siento perdido >.<