2010-06-21 5 views
1

C# n'est certainement pas mon costume fort alors j'apprécie tous les gens généreux partageant leurs connaissances. Je travaille avec un formulaire Windows et j'ai lu sur les événements et j'ai trouvé une excellente aide sur la façon de modifier un TabControl afin que je puisse avoir un événement OnDraw qui va ajouter de la couleur aux onglets.C# - événement couleur TabPage

La couleur de chaque onglet est basée sur l'état d'une variable de connexion: actuelle (vert) perdu (rouge) Stale (jaune)

L'événement OnDraw fonctionne excellent pour mettre à jour la couleur de chaque onglet , mais cela ne se produit que lorsque l'utilisateur sélectionne un autre onglet à afficher. Je voudrais que la couleur de chaque onglet soit mise à jour chaque fois que l'état de la connexion change. Par exemple, supposons que l'onglet n ° 1 soit vert, mais que l'état de connexion devienne obsolète. L'onglet doit alors être coloré en jaune, mais il ne sera pas coloré jusqu'à ce que l'utilisateur clique sur un autre onglet et l'événement OnDraw est déclenché. Donc, j'essaie de comprendre comment faire cela. Lorsque l'événement OnDraw est déclenché normalement (lorsque l'utilisateur clique sur un autre onglet), un paramètre "DrawItemEventArgs" est transmis au gestionnaire pair. Cette variable est déjà remplie avec les données pertinentes nécessaires pour déterminer sur quel onglet a été cliqué, les limites de cet onglet et etc. Donc, je ne sais pas d'où il vient ou comment je peux recréer par programme un tel appel pour re-colorer les onglets chaque fois que la variable de connexion change.

S'il vous plaît laissez-moi savoir si j'ai besoin de clarifier quoi que ce soit! Merci.

Répondre

0

Si vous souhaitez une actualisation constante, vous devez probablement créer l'objet System.Timers.Timer. Une fois que vous créez un temporisateur et que vous définissez la valeur de graduation du temporisateur sur l'intervalle dont vous avez besoin (en millisecondes), l'événement OnTimerTick se déclenche à intervalles réguliers. Depuis cet événement, vous pouvez appeler votre méthode OnDraw via la méthode Invalidate(). Invalidate indique au système que votre écran doit être actualisé et appelle OnDraw et OnPaint à la prochaine opportunité disponible.

+0

La contribution de tout le monde a été si rapide, je m'excuse de ne pas revenir à vous trois hier - je n'ai pas eu l'occasion d'essayer votre suggestion. MikeD, je n'avais pas considéré une minuterie. Cela fonctionnera certainement très bien parce que j'ai besoin de temporiser l'état de la connexion (c'est-à-dire courant -> Stale) si aucune nouvelle donnée n'est reçue pendant un certain temps. Merci! – zlarsen

1

Vous pouvez appeler Invalidate() sur le contrôle pour forcer un repeindre.

+0

A travaillé parfaitement! Au début était à la recherche d'une instruction "using" manquante, mais j'ai alors compris que c'était mon TabControl qui devait l'appeler, soit dans la classe TabControl (this.Invalidate()) soit dans my Form, myTabControl.Invalidate(); Merci beaucoup! – zlarsen

+0

Si j'avais le représentant, je vous voterais tous 1! ;) – zlarsen

1

Si vous avez un événement déclenché lorsque votre état de connexion change, vous pouvez faire une

InvalidateVisual() 

sur tous vos onglets à partir de cet événement.

+0

Merci pour votre contribution! Invalidate() a semblé fonctionner correctement pour moi, y a-t-il une différence notable avec InvalidateVisual()? – zlarsen

+0

InvalidateVisual est ce que vous utilisez dans WPF, mon erreur – FlyingStreudel