Cómo: Hacer invisible un formulario Windows Forms de inicio

Para hacer invisible el formulario principal de una aplicación para Windows cuando se inicia la aplicación, debe trasladar la lógica de inicio de la aplicación a una clase diferente. No basta con definir la propiedad Visible en false.

Una vez separada la duración de la aplicación de la duración del formulario, puede hacer visibles (e invisibles) los formularios, puesto que la aplicación terminará cuando "cierre" la clase que se utilizó para iniciarla.

Nota

Puesto que un módulo es invisible mientras se ejecuta su código, el procedimiento siguiente incluye un paso para agregar un cuadro de mensaje al módulo de inicio, simplemente para demostrar que la aplicación se está ejecutando.

Para establecer que un formulario sea invisible al principio

  1. Siga uno de estos procedimientos:

    1. En Visual Basic, agregue un módulo a la aplicación para Windows; para ello, haga clic con el botón secundario del mouse en el proyecto y elija Agregar módulo.

    2. En Visual C#, cree una nueva clase.

    3. En Visual C++, abra Form1.cpp de su aplicación para Windows.

      Para obtener más información sobre la creación de una aplicación para Windows, vea Cómo: Crear un nuevo proyecto de aplicación de Windows Forms.

  2. Dentro del módulo o clase, cree una subrutina Main que pueda actuar como objeto de inicio del proyecto.

    El ejemplo de código siguiente muestra qué enfoque se puede dar a esta acción.

    Sub Main()
       ' Instantiate a new instance of Form1.
       Dim f1 as New Form1()
       ' Display a messagebox. This shows the application is running, 
       ' yet there is nothing shown to the user. This is the point at 
       ' which you customize your form.
       System.Windows.Forms.MessageBox.Show( _
          "The application is running now, but no forms have been shown.")
       ' Customize the form.
       f1.Text = "Running Form"
       ' Show the instance of the form modally.
       f1.ShowDialog()
    End Sub
    
    // All methods must be contained in a class.
    // This class is added to the namespace containing the Form1 class.
    class MainApplication
    {
       public static void Main()
       {
          // Instantiate a new instance of Form1.
          Form1 f1 = new Form1();
          // Display a messagebox. This shows the application 
          // is running, yet there is nothing shown to the user. 
          // This is the point at which you customize your form.
          System.Windows.Forms.MessageBox.Show("The application "
             + "is running now, but no forms have been shown.");
          // Customize the form.
          f1.Text = "Running Form";
          // Show the instance of the form modally.
          f1.ShowDialog();
       }
    }
    
    // You can use this Mian method in the Program class (Program.jsl):
    public static void main(String[] args)
    {
       // Instantiate a new instance of Form1.
       Form1 f1 = new Form1();
       // Display a messagebox. This shows the application 
       // is running, yet there is nothing shown to the user. 
       // This is the point at which you customize your form.
       System.Windows.Forms.MessageBox.Show("The application "
          + "is running now, but no forms have been shown.");
       // Customize the form.
       f1.set_Text("Running Form");
       // Show the instance of the form modally.
       f1.ShowDialog();
    }
    
    void Main()
    {
       // Instantiate a new instance of Form1.
       Form1^ f1 = gcnew Form1();
       // Display a messagebox. This shows the application 
       // is running, yet there is nothing shown to the user. 
       // This is the point at which you customize your form.
       System::Windows::Forms::MessageBox::Show(
          "The application is running now, "
          "but no forms have been shown.");
       // Customize the form.
       f1->Text = "Running Form";
       // Show the instance of the form modally.
       f1->ShowDialog();
    }
    

    Nota

    El cuadro de mensaje del código anterior se especifica con un espacio de nombres completo porque el módulo creado, a diferencia de un formulario Windows Forms estándar, no importa de forma predeterminada ningún espacio de nombres. Para obtener más información sobre la importación de espacios de nombres, vea Referencias y la instrucción Imports (Visual Basic), using (Directiva, Referencia de C#) (Visual C#) o using Directive (C++) (Visual C++). Application.Run() iniciará el suministro de mensajes, que resulta vital para el comportamiento de ciertas aplicaciones y que puede afectar al comportamiento del formulario durante ciertos momentos del ciclo de vida de la aplicación, como su apagado. Para obtener más información, vea Application.Run (Método).

  3. Cambie el objeto de inicio del proyecto para que sea Sub Main en lugar de Form1.

    En Visual C#, establezca el objeto de inicio en el nombre de la clase del ejemplo anterior. Para obtener más información, vea Cómo: Elegir el formulario de inicio en una aplicación para Windows, así como Cómo: Cambiar el objeto inicial de una aplicación (Visual Basic).

    Nota

    En Visual C++, omita este paso para las aplicaciones para Windows.

  4. Presione F5 para ejecutar el proyecto.

    Cuando se ejecute la aplicación, se ejecutará primero el código de Main() , mientras que la instancia de Form1 permanecerá oculta hasta que se ejecute el código que la muestra. Esto permite hacer lo que se desee dentro de la instancia de Form1 en segundo plano sin que lo perciba el usuario.

Vea también

Tareas

Cómo: Mostrar formularios Windows Forms modales y no modales

Cómo: Establecer la ubicación en pantalla de formularios Windows Forms

Otros recursos

Cambiar la apariencia de formularios Windows Forms