Comment rendre le formulaire de démarrage initialement invisible ou masqué
J’ai un projet d’interface graphique avec formulaire 2 et les formulaires doivent être affichés séparément. Par exemple, lorsque le formulaire 1 est affiché, toutes les autres formes doivent être masquées.
Je peux masquer tous les autres formulaires, mais je ne peux pas masquer le formulaire de démarrage. C’est l’icône de mon application dans la barre d’état système.
Par exemple, les applications pare-feu / antivirus et de messagerie instantanée le font pour s’exécuter en arrière-plan et restr accessibles à l’utilisateur depuis la barre d’état système.
Je suppose que ce que vous demandez, c’est comment faire en sorte que le formulaire n’apparaisse pas dans la barre des tâches et n’apparaisse que dans la barre d’état système, comme un IM ou un anti-virus?
Si c’est le cas, définissez simplement la propriété ShowInTaskbar
du Form
sur false
.
Comme pour rendre le formulaire initial invisible, vous devrez utiliser un ApplicationContext
dans Application.Run
au lieu du formulaire principal.
définir la propriété ShowInTaskbar sur false et définir le WindowState à minimisé
Microsoft a écrit une page Web à ce sujet. Il donne un exemple d’utilisation d’ ApplicationContext
. Au lieu d’avoir une application de formulaires, vous disposez d’une application qui exécute Main()
et Main
puis ouvre les formulaires.
http://msdn.microsoft.com/en-us/library/Aa984417
Vous perdez cependant une perte de fonctionnalité de cette manière, car vous devez désactiver le “framework d’application”. Cela rendra votre Windows moche.
Voici une solution différente, presque un hack mais pas trop mal. Lorsque Windows démarre votre application de formulaire et définit Visible
sur true, cela provoque un appel à SetVisibleCore
. Vous pouvez remplacer cette fonction. Lors de la première utilisation de SetVisibleCore
, définissez-le sur false. À partir de là, il suffit de passer.
Gardez à l’esprit que Form.Load
ne se déclenchera pas au démarrage de votre application si le formulaire ne s’affiche pas, déplacez donc tout le code dans Sub New()
.
Voici le tout:
Public Sub New() ' This call is required by the designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. config.LoadFromRegistry() 'this gets config.StartMinimized from the registry ' Code that needs to run at start, even if the form isn't showing, ' should be here. Form.Load will only happen when the Form is actually ' visible for the first time. End Sub Dim FirstSetVisible As Boolean = True Protected Overrides Sub SetVisibleCore(ByVal value As Boolean) If config.StartMinimized And FirstSetVisible Then MyBase.SetVisibleCore(False) 'ignore Windows attempt to set Visible FirstSetVisible = False 'never do this again Else MyBase.SetVisibleCore(value) End If End Sub