Accueil > > > MODIFICATION DE LA VALEUR D'UN CONTROLE À L'INTERIEUR D'UN THREAD
MODIFICATION DE LA VALEUR D'UN CONTROLE À L'INTERIEUR D'UN THREAD
Information sur la source
Description
Voila je debute en C# je developpe avec visual studio 2005 en .net 2.0 et je me suis bloqué très vite à un problème, je n'arrivé pas à modifier mes champs graphique à l'interieur d'un thread. Grace au site j'ai resolue mon problème avec la fonction "invoke", mais l'utilisation de "invoke" reste malgrès tout assez lourde c pourquoi j'ai voulue automatisé son fonctionnement. Je vous propose un code assez simple qui permet de passé outre l'utilisation d'invoke. N'esité pas à critiqué et me signaler des bugs ou des améliorations cela ne peut être que constructif. d'avance merci.
Source
- using System;
- using System.Collections.Generic;
- using System.Text;
- using System.Windows.Forms;
-
- class Affichage
- {
-
- private FormCollection nbforms;// = Application.OpenForms;
-
- private delegate void Modifier(Form parm_Form_Name, Control parm_Object_Name, object param, int type_modif);
- private Modifier Obj_Modifier;
-
- // constructeur
- public Affichage()
- {
- // initialisation du delegué
- nbforms = Application.OpenForms;
- Obj_Modifier = new Modifier(this.Modif);
- }
-
- #region Fonction lancement
- private void lancement(Object[] OBJ)
- {
- Form Form_Name = ((Form)OBJ[0]);
- Control Object_Name = ((Control)OBJ[1]);
- try
- {
- // test de l'accessibilité de l'objet
- if (Form_Name.Enabled)
- if (Object_Name.Enabled)
- Form_Name.Invoke(Obj_Modifier, OBJ);
- }
- catch
- {
- }
- }
- #endregion
- #region Remplacement
- public void set(string parm_Form_Name, string parm_Object_Name, object param)
- {
- Form Form_Name = (Form)nbforms[parm_Form_Name];
- Control Object_Name = (Control)nbforms[parm_Form_Name].Controls[parm_Object_Name];
-
- Object[] OBJ = new Object[4];
- OBJ[0] = Form_Name;
- OBJ[1] = Object_Name;
- OBJ[2] = param;
- OBJ[3] = 1;
-
- lancement(OBJ);
- }
-
- public void set(Form parm_Form_Name, Control parm_Object_Name, object param)
- {
- Form Form_Name = parm_Form_Name;
- Control Object_Name = parm_Object_Name;
-
- Object[] OBJ = new Object[4];
- OBJ[0] = Form_Name;
- OBJ[1] = Object_Name;
- OBJ[2] = param;
- OBJ[3] = 1;
-
- lancement(OBJ);
- }
- #endregion
-
- #region ajout
- public void setAd(string parm_Form_Name, string parm_Object_Name, object param)
- {
- Form Form_Name = (Form)nbforms[parm_Form_Name];
- Control Object_Name = (Control)nbforms[parm_Form_Name].Controls[parm_Object_Name];
-
- Object[] OBJ = new Object[4];
- OBJ[0] = Form_Name;
- OBJ[1] = Object_Name;
- OBJ[2] = param;
- OBJ[3] = 2;
-
- lancement(OBJ);
- }
- public void setAd(Form parm_Form_Name, Control parm_Object_Name, object param)
- {
- Form Form_Name = (Form)parm_Form_Name;
- Control Object_Name = (Control)parm_Object_Name;
-
- Object[] OBJ = new Object[4];
- OBJ[0] = Form_Name;
- OBJ[1] = Object_Name;
- OBJ[2] = param;
- OBJ[3] = 2;
-
- lancement(OBJ);
- }
-
- #endregion
-
- #region Suppression
- public void Dele(string parm_Form_Name, string parm_Object_Name)
- {
- Form Form_Name = (Form)nbforms[parm_Form_Name];
- Control Object_Name = (Control)nbforms[parm_Form_Name].Controls[parm_Object_Name];
-
- Object[] OBJ = new Object[4];
- OBJ[0] = Form_Name;
- OBJ[1] = Object_Name;
- OBJ[2] = null;
- OBJ[3] = 3;
-
- lancement(OBJ);
- }
-
- public void Dele(Form parm_Form_Name, Control parm_Object_Name, object param)
- {
- Form Form_Name = (Form)parm_Form_Name;
- Control Object_Name = (Control)parm_Object_Name;
-
- Object[] OBJ = new Object[4];
- OBJ[0] = Form_Name;
- OBJ[1] = Object_Name;
- OBJ[2] = null;
- OBJ[3] = 3;
-
- lancement(OBJ);
- }
- #endregion
-
- #region Fonction de modifiation du champ
- // Fonction de mise à jour
- private void Modif(Form parm_Form_Name, Control parm_Object_Name, object param, int type_modif)
- {
- // declaration d'un objet pour chaque controle des roles
- ListBox pt_ListBox;
- DataGridView pt_DataGridView;
- ComboBox pt_ComboBox;
- TextBox pt_TextBox;
-
- switch (type_modif)
- {
- // Ajout simple
- case 1:
- //// execution de la commande
- switch (parm_Object_Name.GetType().Name)
- {
- case "ListBox":
- pt_ListBox = (ListBox)parm_Object_Name;
- pt_ListBox.Items.Add(param.ToString());
- break;
- case "ComboBox":
- pt_ComboBox = (ComboBox)parm_Object_Name;
- pt_ComboBox.Items.Add(param.ToString());
- break;
- case "TextBox":
- pt_TextBox = (TextBox)parm_Object_Name;
- pt_TextBox.Text = param.ToString();
- break;
- case "DataGridView":
- pt_DataGridView = (DataGridView)parm_Object_Name;
- pt_DataGridView.Rows.Clear();
- pt_DataGridView.Rows.Add(param.ToString());
- break;
- default:
- parm_Object_Name.Text = param.ToString();
- break;
- }
- break;
- // Suppression et ajout remplacement
- case 2:
- //// execution de la commande
- switch (parm_Object_Name.GetType().Name)
- {
- case "ListBox":
- pt_ListBox = (ListBox)parm_Object_Name;
- pt_ListBox.Items.Add(param);
- break;
- case "ComboBox":
- pt_ComboBox = (ComboBox)parm_Object_Name;
- pt_ComboBox.Items.Add(param);
- break;
- case "TextBox":
- pt_TextBox = (TextBox)parm_Object_Name;
- pt_TextBox.Text += param.ToString();
- break;
- case "DataGridView":
- pt_DataGridView = (DataGridView)parm_Object_Name;
- //pt_DataGridView.Rows.Clear();
- pt_DataGridView.Rows.Add((object[])param);
- break;
- default:
- parm_Object_Name.Text += param.ToString();
- break;
- }
- break;
- // Suppression
- case 3:
- //// execution de la commande
- switch (parm_Object_Name.GetType().Name)
- {
- case "ListBox":
- pt_ListBox = (ListBox)parm_Object_Name;
- pt_ListBox.Items.Clear();
- break;
- case "ComboBox":
- pt_ComboBox = (ComboBox)parm_Object_Name;
- pt_ComboBox.Items.Clear();
- break;
- case "TextBox":
- pt_TextBox = (TextBox)parm_Object_Name;
- pt_TextBox.Text = "";
- break;
- case "DataGridView":
- pt_DataGridView = (DataGridView)parm_Object_Name;
- pt_DataGridView.Rows.Clear();
- break;
- default:
- parm_Object_Name.Text = "";
- break;
- }
- break;
- }
- }
- #endregion
- }
-
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
class Affichage
{
private FormCollection nbforms;// = Application.OpenForms;
private delegate void Modifier(Form parm_Form_Name, Control parm_Object_Name, object param, int type_modif);
private Modifier Obj_Modifier;
// constructeur
public Affichage()
{
// initialisation du delegué
nbforms = Application.OpenForms;
Obj_Modifier = new Modifier(this.Modif);
}
#region Fonction lancement
private void lancement(Object[] OBJ)
{
Form Form_Name = ((Form)OBJ[0]);
Control Object_Name = ((Control)OBJ[1]);
try
{
// test de l'accessibilité de l'objet
if (Form_Name.Enabled)
if (Object_Name.Enabled)
Form_Name.Invoke(Obj_Modifier, OBJ);
}
catch
{
}
}
#endregion
#region Remplacement
public void set(string parm_Form_Name, string parm_Object_Name, object param)
{
Form Form_Name = (Form)nbforms[parm_Form_Name];
Control Object_Name = (Control)nbforms[parm_Form_Name].Controls[parm_Object_Name];
Object[] OBJ = new Object[4];
OBJ[0] = Form_Name;
OBJ[1] = Object_Name;
OBJ[2] = param;
OBJ[3] = 1;
lancement(OBJ);
}
public void set(Form parm_Form_Name, Control parm_Object_Name, object param)
{
Form Form_Name = parm_Form_Name;
Control Object_Name = parm_Object_Name;
Object[] OBJ = new Object[4];
OBJ[0] = Form_Name;
OBJ[1] = Object_Name;
OBJ[2] = param;
OBJ[3] = 1;
lancement(OBJ);
}
#endregion
#region ajout
public void setAd(string parm_Form_Name, string parm_Object_Name, object param)
{
Form Form_Name = (Form)nbforms[parm_Form_Name];
Control Object_Name = (Control)nbforms[parm_Form_Name].Controls[parm_Object_Name];
Object[] OBJ = new Object[4];
OBJ[0] = Form_Name;
OBJ[1] = Object_Name;
OBJ[2] = param;
OBJ[3] = 2;
lancement(OBJ);
}
public void setAd(Form parm_Form_Name, Control parm_Object_Name, object param)
{
Form Form_Name = (Form)parm_Form_Name;
Control Object_Name = (Control)parm_Object_Name;
Object[] OBJ = new Object[4];
OBJ[0] = Form_Name;
OBJ[1] = Object_Name;
OBJ[2] = param;
OBJ[3] = 2;
lancement(OBJ);
}
#endregion
#region Suppression
public void Dele(string parm_Form_Name, string parm_Object_Name)
{
Form Form_Name = (Form)nbforms[parm_Form_Name];
Control Object_Name = (Control)nbforms[parm_Form_Name].Controls[parm_Object_Name];
Object[] OBJ = new Object[4];
OBJ[0] = Form_Name;
OBJ[1] = Object_Name;
OBJ[2] = null;
OBJ[3] = 3;
lancement(OBJ);
}
public void Dele(Form parm_Form_Name, Control parm_Object_Name, object param)
{
Form Form_Name = (Form)parm_Form_Name;
Control Object_Name = (Control)parm_Object_Name;
Object[] OBJ = new Object[4];
OBJ[0] = Form_Name;
OBJ[1] = Object_Name;
OBJ[2] = null;
OBJ[3] = 3;
lancement(OBJ);
}
#endregion
#region Fonction de modifiation du champ
// Fonction de mise à jour
private void Modif(Form parm_Form_Name, Control parm_Object_Name, object param, int type_modif)
{
// declaration d'un objet pour chaque controle des roles
ListBox pt_ListBox;
DataGridView pt_DataGridView;
ComboBox pt_ComboBox;
TextBox pt_TextBox;
switch (type_modif)
{
// Ajout simple
case 1:
//// execution de la commande
switch (parm_Object_Name.GetType().Name)
{
case "ListBox":
pt_ListBox = (ListBox)parm_Object_Name;
pt_ListBox.Items.Add(param.ToString());
break;
case "ComboBox":
pt_ComboBox = (ComboBox)parm_Object_Name;
pt_ComboBox.Items.Add(param.ToString());
break;
case "TextBox":
pt_TextBox = (TextBox)parm_Object_Name;
pt_TextBox.Text = param.ToString();
break;
case "DataGridView":
pt_DataGridView = (DataGridView)parm_Object_Name;
pt_DataGridView.Rows.Clear();
pt_DataGridView.Rows.Add(param.ToString());
break;
default:
parm_Object_Name.Text = param.ToString();
break;
}
break;
// Suppression et ajout remplacement
case 2:
//// execution de la commande
switch (parm_Object_Name.GetType().Name)
{
case "ListBox":
pt_ListBox = (ListBox)parm_Object_Name;
pt_ListBox.Items.Add(param);
break;
case "ComboBox":
pt_ComboBox = (ComboBox)parm_Object_Name;
pt_ComboBox.Items.Add(param);
break;
case "TextBox":
pt_TextBox = (TextBox)parm_Object_Name;
pt_TextBox.Text += param.ToString();
break;
case "DataGridView":
pt_DataGridView = (DataGridView)parm_Object_Name;
//pt_DataGridView.Rows.Clear();
pt_DataGridView.Rows.Add((object[])param);
break;
default:
parm_Object_Name.Text += param.ToString();
break;
}
break;
// Suppression
case 3:
//// execution de la commande
switch (parm_Object_Name.GetType().Name)
{
case "ListBox":
pt_ListBox = (ListBox)parm_Object_Name;
pt_ListBox.Items.Clear();
break;
case "ComboBox":
pt_ComboBox = (ComboBox)parm_Object_Name;
pt_ComboBox.Items.Clear();
break;
case "TextBox":
pt_TextBox = (TextBox)parm_Object_Name;
pt_TextBox.Text = "";
break;
case "DataGridView":
pt_DataGridView = (DataGridView)parm_Object_Name;
pt_DataGridView.Rows.Clear();
break;
default:
parm_Object_Name.Text = "";
break;
}
break;
}
}
#endregion
}
Conclusion
pour utliser cette classe l'utilisation reste je pense assez simple.
declaration d'un objet.
exemple :
Affichage pt_Affichage = new Affichage();
et utilisation de la fonction set avec les parametres suivant
("nom de la fenetre","nom du champ","texte a ajouter")
exemple :
pt_Affichage.set("Form1", "listBox_Historique", "coucou");
Historique
- 17 avril 2006 10:45:30 :
- oubli au niveau de l'utilisation. Ne pas oublier de changer le namespace par celui de l'application...
- 29 novembre 2006 15:55:03 :
- J'ai moi même été vite bloqué, et comme je travaille sur pas mal de source je ne prends pas trop le temps faire avancer celle-ci et j'en suis désolé. J'ai modifier la source pour que l'on puisse l'utiliser plus facilement. Si quelqu'un a une meilleur solution, merci de faire avancé le code.
- 29 novembre 2006 15:56:27 :
- erreur de manip ;-)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Pb d'affichage de fenetre et thread... [ par bigflo ]
Salut,Je developpe un client de tchat en c#.Mais j'ai quelque pb d'affichage des fenetres de tchat. Explication:Bon, j'ai une treeview et lorsque je d
Questions sur les threads + Au Secours point d'exclamation [ par emmanuel9 ]
Bonjour à tous, En faite ma question serait sur le threads : J'ai cette fonction ci qui me sert à afficher un listview et une progressbar
Diificulté d'affichage d'un control personnalisé [ par z_san ]
bonjourvoilà j'ai un ptit soucis avec un controle que je crée en ce moment, le controle et un graph qui affiche de chronogrammes en tps réel, j'ai dés
Thread probleme d'acces a des controles [ par warenbe ]
Yop j'ai un probleme j'ai une fonction quia une boucle qui dure treeeeeeeeeeeeees longtemps (quelques milliers d'entree a verifier une par une et c'es
Equivalent à Control.Invoke? [ par leprov ]
Existe-t-il un équivalent à la méthode control.invoke qui aie la meme fonctionnalité, mais lorsque l'on ne dispose pas d'un controle? c'est plus une c
Actualiser l'affichage d'un gif [ par aymeric08 ]
Bonjour,Mon programme en C# réalise une copie de fichier du disque dur sur une clé USB. Pendant ce temps j'aimerai afficher un gif animé pour faire pa
Thread, class et objets [ par thebigboss ]
Bonjour, J'ai un programme avec une mainform qui appelle une class. J'ai une progressbar dans ma mainform et un thread qui la fait avancer (à l'aide
Cross-thread problème [ par winny68 ]
Bonjour, j'ai un problème de compréhension pour réaliser un cross-thread via l'invoke. j'ai vu qu'il y a deux manières de faire un appel; Acti
Ajout d'un contrôle depuis un thread en utilisant Invoke... [ par gazous ]
Bonjour,Je vous contacte car j'ai vu que vous étiez assez calé en dll.Mon problème :J'ai un thread qui essaye d'ajouter un contrôle dans un panel char
Empêcher multiples threads [ par ansizak ]
Bonjour, Je travaille sur un code qui génère des graphes. La génération du graph s'effectue dans un thread afin de permettre l'utilisation du reste d
|
Derniers Blogs
[TECHDAYS2012] OUI J'Y SERAI![TECHDAYS2012] OUI J'Y SERAI! par JeremyJeanson
Bonsoir, Certes, je l'annonce avec un peu de retard, mais je serai effectivement au Techdays demain. Comme l'an dernier, je participerai au programme ATE (Ask The Expert). Si vous avez des questions Workflow, WCF, AppFabric ou plus généralement .net, n'hé...
Cliquez pour lire la suite de l'article par JeremyJeanson TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|