How to: Make a Startup Windows Form Invisible

To make the main form of a Windows-based application invisible when the application starts, you must move the application's startup logic into a separate class. You cannot simply set its Visible property to false.

After you have separated the lifetime of the application from the lifetime of the form, you can make forms visible (and invisible), because the application will end when you "close" the class that was used for application startup.

Note

Because a module is invisible when its code is running, the procedure that follows includes a step for adding a message box to the startup module to simply demonstrate that the application is running.

To set a form to be invisible at its inception

  1. Do one of the following:

    1. In Visual Basic, add a module to your Windows-based application by right-clicking the project and choosing Add Module.

    2. In Visual C#, create a new class.

    3. In Visual C++, open Form1.cpp of your Windows-based application.

      For more information about creating a Windows-based application, see How to: Create a New Windows Forms Application Project.

  2. Within the module or class, develop a Main subroutine that can act as the startup object for the project.

    The following code example shows how you might approach this.

    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();
    }
    

    Note

    The message box in the previous code example is specified with a fully qualified namespace because the created module, unlike a standard Windows Form, does not import any namespaces by default. For more information about importing namespaces, see References and the Imports Statement (Visual Basic), the using Directive (C# Reference) (Visual C#), or the using Directive (C++) (Visual C++). Application.Run() will start the message pump, which is vital to the behavior of certain applications and can affect form behavior during certain times in the application lifecycle, such as on shutdown. For more information, see Application.Run Method.

  3. Change the startup object for the project to be Sub Main instead of Form1.

    For Visual C#, set the startup object to the name of the class in the previous code example. For more information, see How to: Choose the Startup Form in a Windows Application, as well as How to: Change the Startup Object for an Application (Visual Basic).

    Note

    Skip this step for Windows-based applications in Visual C++.

  4. Press F5 to run the project.

    When the application runs, the code within Main() executes first while the instance of Form1 lingers, hidden, until the code to show it is run. This enables you to do whatever you like within the instance of Form1 in the background without the user's knowledge.

See Also

Tasks

How to: Display Modal and Modeless Windows Forms

How to: Set the Screen Location of Windows Forms

Other Resources

Changing the Appearance of Windows Forms