2009-11-24 3 views
1

Pour recréer ce comportement, vous devez créer une forme de pop-up avec les propriétés suivantes:Réglage ShowInTaskBar = False, provoque le scintillement lors de la fermeture sous forme modales en .net, WinForms

(1) ShowInTaskBar = False

(2) Afficher le formulaire avec la méthode Show et faire une boucle jusqu'à ce que le formulaire ne soit pas visible.

(3) Pour fermer le formulaire lorsque vous cliquez sur la souris, remplacez OnDeactivate et définissez visible sur False.

Ensuite, créez une autre forme qui affichera la fenêtre contextuelle lorsqu'un bouton est cliqué:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As Syste 
    Using pop As New PopUp 
     pop.Visible = True 
     Do While pop.Visible 
      Application.DoEvents() 
      NativeMethods.MsgWaitForMultipleObjectsEx(0, IntPtr.Zero, 250, &HFF, 4) 
     Loop 
     Me.Activate() 
    End Using 
End Sub 

démarrer le projet, développez le formulaire à remplir l'écran, puis cliquez sur le bouton pour ouvrir la pop- en haut Cliquez ensuite sur n'importe où dans le formulaire original. La plupart du temps, mais pas toujours, le formulaire original disparaît pendant une fraction de seconde avant de réapparaître, provoquant ainsi un effet de scintillement.

Fouiller dans le réflecteur et System.Windows.Forms.Design.DropDownHolder je trouve ce qui suit dans CreateParams qui permet de résoudre le problème de scintillement:

createParams.Style = (createParams.Style Or -2139095040) 

Malheureusement, il met également une bordure noire autour de la forme. (Vous devrez définir FormBorderStyle = System.Windows.Forms.FormBorderStyle.None pour voir ceci.)

Est-ce que quelqu'un a une idée de ce que fait ce style à part mettre la bordure noire autour du formulaire?

J'ai cherché google avec le nombre et l'équivalent hex mais je ne trouve rien.

Merci. ETA: J'ai regardé une liste de constantes de style au pinvoke.net mais je ne suis pas le plus sage.

Répondre

3
-2139095040 = 0x80800000 = WS_POPUP | WS_BORDER 

Cela semble être le coupable pour la frontière aussi.

+0

Merci, c'est tout! – Jules

Questions connexes