Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What causes a window to not appear in the taskbar until it's Alt-Tabbed to in Vista?

When our app is started programatically (either through custom action in MSI installer or when starting a new instance) in Windows Vista (also happens in Windows 7 Beta) it won't appear in the taskbar and isn't focused. Alt-tabbing to it will make it appear in the taskbar properly and stay there.

What causes this? I've seen this in some other apps before as well, but not sure why. Out app is .NET WinForms app. Never see this happen in XP, only Vista and 7

Edit: Well, it seems like the only time this happens reproducibly is when it's run by the installer, I believe there's other times it occurs, but I might just be crazy. The launching code is a bit complex to post because we handle various command line launch parameters and it launches a signin form before actually launching the main app etc.

Has anyone had to deal with this scenario before and worked it out?

like image 557
Davy8 Avatar asked Mar 18 '09 18:03

Davy8


4 Answers

Try checking your main application form "Form Border" property. If it's ToolWindow (Fixed or Sizable), try changing it to FixedDialog for example. This solved the problem in my case.

like image 109
G.So Avatar answered Jun 19 '23 08:06

G.So


The usual reason for this is that your main application window doesn't have the window styles that let Windows know it's a main application window (rather than a tool window or a dialog box). So Windows is having to guess based on how the app was started, etc.

Use Spy++ to complare the window styles (especially extended styles) if your window to that of some other window that doesn't have this problem. Are you missing the WS_EX_APPWINDOW style? Are any other styles/extended styles different from other top level windows?

like image 42
John Knoeller Avatar answered Jun 19 '23 10:06

John Knoeller


G.So's answer made me find the solution for my problem, wich was caused by the fact that i had my form sizable from launch, but set to borderless in the load void.

If anyone is interested in how i managed to keep the switch to borderless and have it pop up as it should in the taskbar without any dirty hacks.. here it is..

Make a new event from the form on the form's "Shown" event, and put your line of code for switching to borderless in here. Problem solved :)

    private void Form1_Shown(object sender, EventArgs e)
    {
         this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
    }

    and for the lazy ones ;) >>>>

    this.Shown += new EventHandler(Form1_Shown);

Thanks again G.So for clearing up what could cause this in the first place.

like image 21
Kevin G Avatar answered Jun 19 '23 08:06

Kevin G


I stuggled with this issue as well, and found like a previous commenter said, you cannot have anything in the form's Load() event that changes that FormBorderStyle property. Move anything that changes it to the Shown() event.

like image 31
Chris Avatar answered Jun 19 '23 08:06

Chris