Windows applications written using the .NET framework do not have a clean way of making the startup form initially invisible or hidden. Setting the
Me.Visible property to
False in the
Load event of the form does not work. In this post, I show you a sample application that starts up invisible and uses a timer to become visible after 10 seconds.
I am assuming the reader knows how to create a basic VB Windows application project in Visual Studio. I have created a project called InvisibleAppSample and added a form called
MainForm to it. The basic functionality of keeping the application hidden at startup is achieved by overriding the
SetVisibleCore method of the
Form class. Add a boolean variable to the form to track visibility.
Private keepInvisible As Boolean
Now, add the following method to the MainForm class to override the SetVisibleCore base method. If you start typing
Protected Overrides, Visual Studio 2005 (and upwards, I presume) will show you a list of methods you can override.
Protected Overrides Sub SetVisibleCore(ByVal value As Boolean) If keepInvisible Then MyBase.SetVisibleCore(False) Else MyBase.SetVisibleCore(value) End If End Sub
We need to initialize the value of
keepInvisible when the class is instantiated, otherwise it will take the default value of
False. So, add an instance of the
New method for MainForm:
Public Sub New() ' This call is required by the Windows Form Designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. keepInvisible = True End Sub
At this point, you can run your app, but the window will remain invisible forever, so it’s of no use. In a production app, you will probably depend on various external events to decide when to make the window visible. For my example, I’m simply using a timer. So, add the timer to the MainForm class:
Private WithEvents showWindowTimer As Timer
Now create the Tick event handler for the timer. VS will help you with the stub if you select ’showWindowtimer’ from the Object dropdown list (left dropdown list above the code pane) and select ‘Tick’ in the methods list (right dropdown list above the code pane). Mind you, the
WithEvents qualifier is necessary for the object to show up in the Object dropdown list.
Private Sub showWindowTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles showWindowTimer.Tick keepInvisible = False Me.Visible = True showWindowTimer.Stop() End Sub
Hey wait! We never started the timer in the first place! So, add this code to the end of the
MainForm constructor (
showWindowTimer = New Timer() showWindowTimer.Interval = 10000 showWindowTimer.Start()
Aaaannnddd we are done! Compile the project and run it (always a good idea to run it in the debugger the first time around, btw). Nothing happens for the 1st 10 seconds, and then I get this window:
If you are too lazy to do all the work from scratch, you can download the VS2k5 solution right here.