Updateforms - rafraîchissement de toutes les fenêtres d'une application

Soyez le premier à donner votre avis sur cette source.

Vue 7 661 fois - Téléchargée 273 fois

Description

Ce projet a pour objet la mise à jour de l'aspect de fenêtres enfants, mais l'API Win32 implémentée, peut très bien servir à toute autre chose.

En effet, il n'est pas forcément pratique et propre, de conserver une instance de toutes les fenêtres gérées par l'application pour appeler une méthode en particulier.
L'utilisation de l'API "EnumThreadWindows" permet l'énumération de toutes les fenêtres gérées par un même thread. Les fenêtres enfants peuvent ainsi être générées à la volée.

Pour notre exemple, j'ai décidé d'utiliser la méthode Invalidate() et l'argument-utilisateur représente un booléen pour le rafraîchissement des contrôles enfants.

Source / Exemple :


/// <summary>
		/// Invalidation de toutes les fenêtres associées au thread en cours. 
		/// </summary>
		/// <param name="invalidateChildren">true, pour invalider les contrôles
		/// enfants de la fenêtre.</param>
		/// <returns>Succès ou échec de l'opération.</returns>
		public static bool InvalidateThreadWindows(bool invalidateChildren)
		{
			return EnumThreadWindows(
				AppDomain.GetCurrentThreadId(),
				new EnumThreadWndCallback(EnumThreadWndProc),
				invalidateChildren
				);
		}

		private static bool EnumThreadWndProc(IntPtr hwnd, bool lParam)
		{
			try
			{
				Control ctl = Control.FromHandle(hwnd);
				if (ctl is Form) ctl.Invalidate(lParam);
			}
			catch{}

			return true; //on poursuit l'énumération des fenêtres
		}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Commenter la réponse de Utilisateur anonyme

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.