Question

Vous savez que tous les « Vous avez de nouvelles réponses! » bar sur le SO de notification. Je voudrais la même chose dans un formulaire, de préférence aussi lisse. Est-il un moyen simple? Ou dois-je créer complètement moi-même?

Mes recherches n'a donné de bons résultats, que beaucoup de barres de progression et popups dans la zone de notification du système, mais ce n'est pas ce que je cherche.

Les messages que je veux afficher appartiennent à un formulaire, et non à l'ensemble de l'application

Était-ce utile?

La solution

Créer deux panneaux dans votre forme, un panneau de notification accosté en haut, et au-dessous d'un panneau contenu ancré en haut. Dans votre Form.Load, régler la hauteur du panneau de notification à zéro. Ne pas régler la hauteur à zéro en mode Création, vous ne serez pas en mesure de cliquer sur le panneau de notification pour le modifier.

Ensuite, lorsque vous recevez une notification, dessiner le contenu dans le panneau de notification et de créer une System.Windows.Form.Timer qui augmente la hauteur du panneau de notification par quelques pixels tous les quelques dizaines de millisecondes. Arrêter lorsque le panneau est de la hauteur souhaitée. Faites la même chose avec une hauteur négative pour cacher le panneau.

Cela ne nécessite pas de repeindre ou recalcule tailles ou positions de quoi que ce soit, ne rien Overdraw, et semble lisse. Je l'ai fait et il fonctionne.

Autres conseils

Vous pourriez simplement animer un panneau laissant tomber du haut de la zone client du formulaire.

Augmentation de la coordonnée y du panneau dans une boucle temporisée. Le panneau commencerait invisible et lentement devenir visible. (Le groupe commencerait à -panel.height et travailler son chemin jusqu'à 0.)

Si vous voulez contraint à une forme particulière, il devrait être assez facile de mettre un Panel sur la forme avec son ensemble de Dock à DockStyle.Top, puis placez une étiquette pour la description et un bouton qui le cache.

Il est difficile de ne pas faire avec un panneau ou un UserControl, mais la partie Checklist rend le contenu de la diapositive de forme vers le bas que les diapositives de barre vers le bas. Pour simplifier que j'utiliser un SplitContainer. Le haut splitpanel contient la barre de notification et la distance de séparation est initialement 0. Faites glisser la barre en vue par incrémenter la propriété SplitterDistance. Faire ce que signifie cette façon vous n'avez pas à vous soucier de faire les autres contenus du bas de diapositives de forme (ce qui est embêtant, car il vous empêche d'utiliser docking).

Le seul inconvénient à utiliser SplitContainer je peux penser est que l'animation de la barre sera légèrement différente: le texte ne défile pas vers le bas avec la barre, il sera révélé en place que les diapositives de barre vers le bas. Si ce embêtements vous, vous pouvez le corriger en ayant le texte (ou votre panneau / contrôle personnalisé) glisser vers le bas que vous augmentez la distance de séparation (seulement quelques plus de lignes de code).

Afficher la barre:

    for (int i = 0; i <= 33; i++)
    {
        splitContainer1.SplitterDistance = i;
        Thread.Sleep(5);
        Refresh();
    }

Masquer la barre:

    for (int i = 33; i >= 0; i--)
    {
        splitContainer1.SplitterDistance = i;
        Thread.Sleep(5);
        Refresh();
    }

Bien sûr, si cela ne vous dérange pas la barre de notification couvrant simplement la partie supérieure de votre formulaire, vous pouvez juste faire la chose très facilement avec un panneau. :)

Je cherchais la même chose que maintenant et trouvé ce sur le projet de code

Je ne l'ai pas utilisé, donc je ne sais pas comment il est solide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top