none
La instrucción no es válida en un espacio de nombres

    Question

  • Este error me sale cuando quiero poner un evento en el fichero ApplicationEvents.vb ya que quiero poner un evento relacionado con la aplicación que se producirá cuando inicie mi aplicación y antes de crear el formulario principal, vendria a ser una especia de cartel de bienvenida en un formulario que lo que quiero es que se mantenga 3 segundos por ejemplo y segun lei tengo que venir a este archivo y hacer el evento ahi. Pero dicho archivo esta vacio sin nada y si apreto en la solapa General no hay ningun evento cargado entonces lo copio, el evento que quiero poner ahi es este:

    Public

     

    Sub Ap_Startup(ByVal sender As Object, ByVal e As StartupEventArgs) Handles me.Startup
            System.Threading.Thread.Sleep(300)
    End
    Sub


    Thursday, August 20, 2009 5:11 PM

Answers

  • "Damian E." escribió:

    > Este error me sale cuando quiero poner un evento en el fichero ApplicationEvents.vb

    Hola:

    Si obtienes el mensaje de error «La instrucción no es válida en un espacio de nombres», es porque el procedimiento Ap_Startup lo habrás incluido dentro de un bloque Namespace ... End Namespace, y lo que tienes que hacer es incluirlo dentro de la clase MyApplication.

    Pero para ello, en las opciones del proyecto, pestaña Aplicación, tienes que pulsar el botón «Ver eventos de aplicaciones». Una vez que te aparezca la clase MyApplication, seleccionas en el editor de código el objeto (MyApplication eventos), y en la parte derecha, seleccionas el evento Startup. Ahí es donde debes de incluir el código

            System.Threading.Thread.Sleep(300)

    Y para los "carteles de bienvenida", puedes añadir a tu proyecto un formulario que actúe de Pantalla de Presentación. Para ello selecciona Proyecto --> Agregar Windows Forms..., y en la sección Windows Forms, selecciona la plantilla Pantalla de Presentación.

    Posteriormente, entra en las opciones del proyecto, pestaña Aplicación, y al final de la misma, hay un control tipo ComboBox donde tienes que especificar el nombre del formulario que actuará de Pantalla de Presentación.

    Si la respuesta te ha sido útil, no olvides marcarla como satisfactoria.

    Un saludo

    Enrique Martínez [MS MVP - VB]
    Thursday, August 20, 2009 7:23 PM
    Moderator
  • "Damian E." escribió:

    >  la pantalla de bienvenida solo me aparece si el usuario se autentico correctamente
    > o sea que la llamo desde codigo, siendo el primer formulario el de logueo y si es
    > correcto ahi aparece la de bienevenida por unos 3 segundos y luego el sistema completo

    Entonces tienes que hacer que el objeto inicial de tu aplicación sea el procedimiento Sub Main.

    Desde éste procedimiento, tendrás que llamar al formulario Login. Si la validación es correcta, entonces llamarás a la Pantalla de bienvenida, y cuando se cierra ésta, al formulario inicial de tu aplicación.

    Pero si la validación no es correcta, no tendrás que hacer nada, porque la aplicación finalizará sin más:

       Public Shared Sub Main()

            ' aplicamos los estilos visuales
            Application.EnableVisualStyles()

            ' Llamamos al formulario Login
            Dim frm As New FormLogin

            Dim dlg As DialogResult = frm.ShowDialog

            If dlg = Windows.Forms.DialogResult.OK Then

                ' Mostramos el formulario de bienvenida
                '
                Dim f As New FormBienvenida

                f.ShowDialog()

                ' Por último, llamamos al formulario principal de la aplicación
                ' 
               Application.Run(FormPrincipal)

            End If

            ' Llegado a éste punto, finalizará la aplicación.

        End Sub


    Enrique Martínez [MS MVP - VB]
    Thursday, August 20, 2009 7:35 PM
    Moderator
  • "Damian E." escribió:

    >  cuando aprete en "ver eventos de mi aplicacion" y me aparecio el archivo
    > "ApplicationEvents.vb" este aparece vacio o sea sin nada, al apretar en los
    > combos de "Nombre de Clase" y de "Nombre del Método" no hay nada solo
    > dice (General) y en el otro (Declaraciones) pero vacios.....

    Es que cuando se aprieta por primera vez el botón «Ver eventos de aplicaciones», simplemente aparece en pantalla lo siguiente:

       Namespace My

             Partial Friend Class MyApplication

             End Class

        End Namespace

    Si tu te limitas a escribir cualquier código entre 

       Namespace My

       End Namespace


    obtendrás el error que nos estás comentando, «La instrucción no es válida en un espacio de nombres», tal y como te comenté en mi primera respuesta. Tienes que escribir el código entre el bloque

       Partial Friend Class MyApplication

       End Class

    Si por casualidad, en el archivo ApplicationEvents.vb sólo te aparece el bloque Namespace,

      Namespace My

      End Namespace

    es decir, sin el bloque Class MyApplication, tienes que eliminar el archivo ApplicationEvents.vb, y volver a pulsar el botón «Ver eventos de aplicaciones».

    Una vez que te aparezca correctamente la clase MyApplication, seleccionas en el editor de código el objeto (MyApplication eventos), y en la parte derecha, seleccionas el evento Startup. Ahí es donde debes de incluir tu código, en cualquiera de los procedimientos de evento de la aplicación.







    Enrique Martínez [MS MVP - VB]
    Friday, August 21, 2009 2:48 PM
    Moderator
  • "Damian E." escribió:

    > ahora lo que me pasa es que no logro que se ejecute primero la pantalla de
    > bienvenida ya que en el codigo que me pasas y en la parte del
    > If dlg = Windows.Forms.DialogResult.OK Then
    >
    > no me entra da como que el usuario puso cancelar y no es asi, se logea y esta OK.

    Porque tu formulario Login tiene que estar preparado para devolver OK o Cancel, dependiendo que el usuario haya pulsado el botón Aceptar o Cancelar, respectivamente.

    ¡Vamos a ver! Si tú tienes un formulario Login, que es el primer formulario que se muestra al usuario, olvídate de los eventos de las aplicaciones, por tanto, del archivo ApplicationEvents.vb.

    El objeto de inicio de tu aplicación, deberá de ser el objeto «Sub Main». Para ello, entra en las propiedades del proyecto, pestaña Aplicación, y desmarcas la casilla de verificación «Habilitar marco de trabajo de la aplicación». Una vez hecho esto, en el control «Objeto de inicio», selecciona la opción «Sub Main».

    Ahora, vamos con el formulario Login. Como formulario de validación que se precie, entiendo que deberá de tener dos botones, Aceptar y Cancelar, para devolver un valor DialogResult que nos indicará el botón pulsado por el usuario.

    Al final del evento Click del botón Aceptar, ejecutarías lo siguiente:

         ' El usuario ha pulsado el botón Aceptar
         Me.DialogResult = DialogResult.OK

    Y al final del evento Click del botón Cancelar, ejecutarías ésto otro:

         ' El usuario ha pulsado el botón Cancelar
         Me.DialogResult = DialogResult.Cancel

    No te preocupes de cerrar el formulario Login, porque cuando se ejecute cualquiera de las dos órdenes, el formulario se cerrará automáticamente.

    Si también quieres cerrar el formulario Login cuando el usuario pulse la tecla Escape, en el evento Load del formulario Login, ejecuta lo siguiente:

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

            ' Se cerrará el formulario cuando se pulse la tecla Escape
            Me.CancelButton = btnCancel

         End Sub

    Como has indicado que el objeto inicial de tu aplicación es el procedimiento «Sub Main», tienes que habilitar dicho procedimiento. Para ello, DENTRO del formulario Login, inserta el código que te indico a continuación, TAL Y COMO está:

        Public Shared Sub Main()

            ' aplicamos los estilos visuales
            Application.EnableVisualStyles()

            ' Llamamos al formulario Login
            Dim frm As New frmLogin

            Dim dlg As DialogResult = frm.ShowDialog()

            If dlg = Windows.Forms.DialogResult.OK Then

                ' Mostramos el formulario de bienvenida
                '
                Dim f As New FormBienvenida

                f.ShowDialog()

                ' Por último, llamamos al formulario principal de la aplicación
                '
                Application.Run(FormPrincipal)

            End If

            ' Llegado a éste punto, finalizará la aplicación.

        End Sub

    Lo único que tienes que modificar del procedimiento Sub Main son los nombres de los formularios, para que se adapten a los que tienes en tu proyecto.

    Ahora, vamos con el formulario de Bienvenida, el cual se mostrará siempre y cuando el usuario haya pasado la validación, es decir, haya pulsado el botón Aceptar y se haya comprobado que puede continuar con la aplicación.

    > donde debo poner la instruccion System.Threading.Thread.Sleep(300)

    La tienes que colocar DENTRO del evento «Shown» del formulario de bienvenida:

    Private Sub FormBienvenida_Shown(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Shown

            ' Suspendemos el subproceso durante el tiempo especificado
            System.Threading.Thread.Sleep(300)

            ' Cerramos el formulario
            Me.Close()

    End Sub

    Desde luego, con esos milisegundos, a lo mejor el usuario no logra ver el formulario de bienvenida.

    ¡Bueno! ¡Pues eso es todo!

    Espero que al menos sepas apreciar el tiempo que he dedicado a tus respuestas, marcando como satisfactorias las respuestas ofrecidas. ;-)


    Enrique Martínez [MS MVP - VB]
    Saturday, August 22, 2009 5:41 AM
    Moderator
  • Si no te limitas a ejecutar el código fuente, tal y como yo lo he escrito, poco vas a avanzar en la solución de TU PROBLEMA.

    Te he comentando anteriormente, QUE TE OLVIDES DE LOS APPLICATION, porque ¿para qué los quieres, si ya tienes un procedimiento Sub Main como objeto inicial?

    >  la pantalla de bienvenida me la muestra a medias ya que no me termina de cargar

    Mira, tampoco soy adivino, e ignoro qué código estás ejecutando en dicho formulario para que la pantalla te la muestre a medias. ¿?

    Me he entretenido en prepararte un ejemplo, con unas ciertas mejoras en mi opinión, que ilustra cómo tienes que mostrar el formulario Login, el formulario de pantalla de bienvenida, y el formulario principal de la aplicación, sin entrar en detalles sobre validación de usuarios, ni otros temas que no vienen al cuento.

    Si deseas observarlo, puedes descargar el archivo zip desde el siguiente enlace:

    http://cid-54f8ce2a2d3e8f23.skydrive.live.com/self.aspx/.Public/DemoSplashScreen.zip

    Se me olvidaba. El ejemplo está creado con la versión 2008 de Visual Studio. Si utilizas una versión anterior, crea un nuevo proyecto y añade manualmente los archivos Form1.vb, Login.vb y SplashScreen1.vb, e indica en las opciones del proyecto, que el objeto inicial es el procedimiento Sub Main.



    Enrique Martínez [MS MVP - VB]
    Saturday, August 22, 2009 1:53 PM
    Moderator

All replies

  • Hola amigo.

    En propiedad de proyecto , Aplicación: existe una opción de pantalla de presentación: donde tu puede fijar un formulario como splash screen. y eso es todo.
    no tiene que intervenir con algun evento especifico.

    cualquier cosa me avisa!


    Por favor calificame como respuesta!!!
    Developer
    Thursday, August 20, 2009 7:02 PM
  • Ya se eso pero no me sirve ya que no es lo primero que me aparece, la pantalla de bienvenida solo me aparece si el usuario se autentico correctamente o sea que la llamo desde codigo, siendo el primer formulario el de logueo y si es correcto ahi aparece la de bienevenida por unos 3 segundos y luego el sistema completo. Gracias
    Thursday, August 20, 2009 7:16 PM
  • "Damian E." escribió:

    > Este error me sale cuando quiero poner un evento en el fichero ApplicationEvents.vb

    Hola:

    Si obtienes el mensaje de error «La instrucción no es válida en un espacio de nombres», es porque el procedimiento Ap_Startup lo habrás incluido dentro de un bloque Namespace ... End Namespace, y lo que tienes que hacer es incluirlo dentro de la clase MyApplication.

    Pero para ello, en las opciones del proyecto, pestaña Aplicación, tienes que pulsar el botón «Ver eventos de aplicaciones». Una vez que te aparezca la clase MyApplication, seleccionas en el editor de código el objeto (MyApplication eventos), y en la parte derecha, seleccionas el evento Startup. Ahí es donde debes de incluir el código

            System.Threading.Thread.Sleep(300)

    Y para los "carteles de bienvenida", puedes añadir a tu proyecto un formulario que actúe de Pantalla de Presentación. Para ello selecciona Proyecto --> Agregar Windows Forms..., y en la sección Windows Forms, selecciona la plantilla Pantalla de Presentación.

    Posteriormente, entra en las opciones del proyecto, pestaña Aplicación, y al final de la misma, hay un control tipo ComboBox donde tienes que especificar el nombre del formulario que actuará de Pantalla de Presentación.

    Si la respuesta te ha sido útil, no olvides marcarla como satisfactoria.

    Un saludo

    Enrique Martínez [MS MVP - VB]
    Thursday, August 20, 2009 7:23 PM
    Moderator
  • "Damian E." escribió:

    >  la pantalla de bienvenida solo me aparece si el usuario se autentico correctamente
    > o sea que la llamo desde codigo, siendo el primer formulario el de logueo y si es
    > correcto ahi aparece la de bienevenida por unos 3 segundos y luego el sistema completo

    Entonces tienes que hacer que el objeto inicial de tu aplicación sea el procedimiento Sub Main.

    Desde éste procedimiento, tendrás que llamar al formulario Login. Si la validación es correcta, entonces llamarás a la Pantalla de bienvenida, y cuando se cierra ésta, al formulario inicial de tu aplicación.

    Pero si la validación no es correcta, no tendrás que hacer nada, porque la aplicación finalizará sin más:

       Public Shared Sub Main()

            ' aplicamos los estilos visuales
            Application.EnableVisualStyles()

            ' Llamamos al formulario Login
            Dim frm As New FormLogin

            Dim dlg As DialogResult = frm.ShowDialog

            If dlg = Windows.Forms.DialogResult.OK Then

                ' Mostramos el formulario de bienvenida
                '
                Dim f As New FormBienvenida

                f.ShowDialog()

                ' Por último, llamamos al formulario principal de la aplicación
                ' 
               Application.Run(FormPrincipal)

            End If

            ' Llegado a éste punto, finalizará la aplicación.

        End Sub


    Enrique Martínez [MS MVP - VB]
    Thursday, August 20, 2009 7:35 PM
    Moderator
  • Bueno se ve que me explique mal, pero mas arriba dije que cuando aprete en "ver eventos de mi aplicacion" y me aparecio el archivo "ApplicationEvents.vb" este aparece vacio o sea sin nada, al apretar en los combos de "Nombre de Clase" y de "Nombre del Método" no hay nada solo dice (General) y en el otro (Declaraciones) pero vacios.....
    Por eso no puedo trabajar con el método Ap_Startup(), yo lo que habia hecho era escribirlo todo por mi cuenta y por eso me marca esa linea azul debajo tirandome el error "La instrucción no es válida en un espacio de nombres."
    Estoy usando Visual Basic 2005 Express Edition y capaz que este IDE no viene con ciertas opciones y por eso estan vacios los cbos del archivo "ApplicationEvents.vb".
    Por ultimo comentarte que al escribir "Application."(punto) no me lo toma el IDE me subraya azul como un error. Gracias y espero que ahora se comprenda mejor.

    • Edited by Damian E. _ Monday, September 09, 2013 8:43 PM
    Friday, August 21, 2009 12:33 PM
  • "Damian E." escribió:

    >  cuando aprete en "ver eventos de mi aplicacion" y me aparecio el archivo
    > "ApplicationEvents.vb" este aparece vacio o sea sin nada, al apretar en los
    > combos de "Nombre de Clase" y de "Nombre del Método" no hay nada solo
    > dice (General) y en el otro (Declaraciones) pero vacios.....

    Es que cuando se aprieta por primera vez el botón «Ver eventos de aplicaciones», simplemente aparece en pantalla lo siguiente:

       Namespace My

             Partial Friend Class MyApplication

             End Class

        End Namespace

    Si tu te limitas a escribir cualquier código entre 

       Namespace My

       End Namespace


    obtendrás el error que nos estás comentando, «La instrucción no es válida en un espacio de nombres», tal y como te comenté en mi primera respuesta. Tienes que escribir el código entre el bloque

       Partial Friend Class MyApplication

       End Class

    Si por casualidad, en el archivo ApplicationEvents.vb sólo te aparece el bloque Namespace,

      Namespace My

      End Namespace

    es decir, sin el bloque Class MyApplication, tienes que eliminar el archivo ApplicationEvents.vb, y volver a pulsar el botón «Ver eventos de aplicaciones».

    Una vez que te aparezca correctamente la clase MyApplication, seleccionas en el editor de código el objeto (MyApplication eventos), y en la parte derecha, seleccionas el evento Startup. Ahí es donde debes de incluir tu código, en cualquiera de los procedimientos de evento de la aplicación.







    Enrique Martínez [MS MVP - VB]
    Friday, August 21, 2009 2:48 PM
    Moderator
  • Bueno te cuento que me anda a medias, hice lo que comentas eliminando el archivo "ApplicationEvents.vb" y volverlo a llamar desde le boton y me aparece la clase parcial y los eventos asi que eso esta OK, pero ahora lo que me pasa es que no logro que se ejecute primero la pantalla de bienvenida ya que en el codigo que me pasas y en la parte del
    If dlg = Windows.Forms.DialogResult.OK Then

    no me entra da como que el usuario puso cancelar y no es asi, se logea y esta OK.
    Y otra cosa donde debo poner la instruccion System.Threading.Thread.Sleep(300) porque el primer formulario que carga es la de logueo y no la de bienvenida o sea que no me sirve poner dicha instruccion dentro de el archivo "ApplicationEvents.vb". Gracias



    • Edited by Damian E. _ Monday, September 09, 2013 8:43 PM
    Friday, August 21, 2009 7:49 PM
  • "Damian E." escribió:

    > ahora lo que me pasa es que no logro que se ejecute primero la pantalla de
    > bienvenida ya que en el codigo que me pasas y en la parte del
    > If dlg = Windows.Forms.DialogResult.OK Then
    >
    > no me entra da como que el usuario puso cancelar y no es asi, se logea y esta OK.

    Porque tu formulario Login tiene que estar preparado para devolver OK o Cancel, dependiendo que el usuario haya pulsado el botón Aceptar o Cancelar, respectivamente.

    ¡Vamos a ver! Si tú tienes un formulario Login, que es el primer formulario que se muestra al usuario, olvídate de los eventos de las aplicaciones, por tanto, del archivo ApplicationEvents.vb.

    El objeto de inicio de tu aplicación, deberá de ser el objeto «Sub Main». Para ello, entra en las propiedades del proyecto, pestaña Aplicación, y desmarcas la casilla de verificación «Habilitar marco de trabajo de la aplicación». Una vez hecho esto, en el control «Objeto de inicio», selecciona la opción «Sub Main».

    Ahora, vamos con el formulario Login. Como formulario de validación que se precie, entiendo que deberá de tener dos botones, Aceptar y Cancelar, para devolver un valor DialogResult que nos indicará el botón pulsado por el usuario.

    Al final del evento Click del botón Aceptar, ejecutarías lo siguiente:

         ' El usuario ha pulsado el botón Aceptar
         Me.DialogResult = DialogResult.OK

    Y al final del evento Click del botón Cancelar, ejecutarías ésto otro:

         ' El usuario ha pulsado el botón Cancelar
         Me.DialogResult = DialogResult.Cancel

    No te preocupes de cerrar el formulario Login, porque cuando se ejecute cualquiera de las dos órdenes, el formulario se cerrará automáticamente.

    Si también quieres cerrar el formulario Login cuando el usuario pulse la tecla Escape, en el evento Load del formulario Login, ejecuta lo siguiente:

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

            ' Se cerrará el formulario cuando se pulse la tecla Escape
            Me.CancelButton = btnCancel

         End Sub

    Como has indicado que el objeto inicial de tu aplicación es el procedimiento «Sub Main», tienes que habilitar dicho procedimiento. Para ello, DENTRO del formulario Login, inserta el código que te indico a continuación, TAL Y COMO está:

        Public Shared Sub Main()

            ' aplicamos los estilos visuales
            Application.EnableVisualStyles()

            ' Llamamos al formulario Login
            Dim frm As New frmLogin

            Dim dlg As DialogResult = frm.ShowDialog()

            If dlg = Windows.Forms.DialogResult.OK Then

                ' Mostramos el formulario de bienvenida
                '
                Dim f As New FormBienvenida

                f.ShowDialog()

                ' Por último, llamamos al formulario principal de la aplicación
                '
                Application.Run(FormPrincipal)

            End If

            ' Llegado a éste punto, finalizará la aplicación.

        End Sub

    Lo único que tienes que modificar del procedimiento Sub Main son los nombres de los formularios, para que se adapten a los que tienes en tu proyecto.

    Ahora, vamos con el formulario de Bienvenida, el cual se mostrará siempre y cuando el usuario haya pasado la validación, es decir, haya pulsado el botón Aceptar y se haya comprobado que puede continuar con la aplicación.

    > donde debo poner la instruccion System.Threading.Thread.Sleep(300)

    La tienes que colocar DENTRO del evento «Shown» del formulario de bienvenida:

    Private Sub FormBienvenida_Shown(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Shown

            ' Suspendemos el subproceso durante el tiempo especificado
            System.Threading.Thread.Sleep(300)

            ' Cerramos el formulario
            Me.Close()

    End Sub

    Desde luego, con esos milisegundos, a lo mejor el usuario no logra ver el formulario de bienvenida.

    ¡Bueno! ¡Pues eso es todo!

    Espero que al menos sepas apreciar el tiempo que he dedicado a tus respuestas, marcando como satisfactorias las respuestas ofrecidas. ;-)


    Enrique Martínez [MS MVP - VB]
    Saturday, August 22, 2009 5:41 AM
    Moderator
  • Gracias por tu tiempo, pero marcare respuesta satifactoria cuando la misma me solucione mi problema. Te cuento que hice todo tal cual, no me esta tomando los Application asi que "Application.EnableVisualStyles()" no lo puse y tampoco "Application.Run(FormPrincipal)" en este ultimo puse f.Show().
    No se si sera por eso pero la pantalla de bienvenida me la muestra a medias ya que no me termina de cargar o sea esta los(6 segundos eso le cambie) pero no me lo muestra completa  es como que no termina de mostrar todo sus datos y despues abre el sistema completo pero al segundo se cierra todo  :(
    Saturday, August 22, 2009 12:51 PM
  • Si no te limitas a ejecutar el código fuente, tal y como yo lo he escrito, poco vas a avanzar en la solución de TU PROBLEMA.

    Te he comentando anteriormente, QUE TE OLVIDES DE LOS APPLICATION, porque ¿para qué los quieres, si ya tienes un procedimiento Sub Main como objeto inicial?

    >  la pantalla de bienvenida me la muestra a medias ya que no me termina de cargar

    Mira, tampoco soy adivino, e ignoro qué código estás ejecutando en dicho formulario para que la pantalla te la muestre a medias. ¿?

    Me he entretenido en prepararte un ejemplo, con unas ciertas mejoras en mi opinión, que ilustra cómo tienes que mostrar el formulario Login, el formulario de pantalla de bienvenida, y el formulario principal de la aplicación, sin entrar en detalles sobre validación de usuarios, ni otros temas que no vienen al cuento.

    Si deseas observarlo, puedes descargar el archivo zip desde el siguiente enlace:

    http://cid-54f8ce2a2d3e8f23.skydrive.live.com/self.aspx/.Public/DemoSplashScreen.zip

    Se me olvidaba. El ejemplo está creado con la versión 2008 de Visual Studio. Si utilizas una versión anterior, crea un nuevo proyecto y añade manualmente los archivos Form1.vb, Login.vb y SplashScreen1.vb, e indica en las opciones del proyecto, que el objeto inicial es el procedimiento Sub Main.



    Enrique Martínez [MS MVP - VB]
    Saturday, August 22, 2009 1:53 PM
    Moderator
  • Bueno gracias por tomarte tu tiempo en ayudarme, despues de tanto ver porque el tuyo andaba bien pero el mio no lo pude solucionar y ahora si con la ayuda de tu codigo logro realizar lo que queria, el problema lo tenia en las lineas de Application dentro del Sub Main(). Gracias de nuevo.

    Monday, August 24, 2009 1:55 PM