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
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
Affichage d'une FORM dans un autre THREAD [ par dhofer ]
Salut,Je ne trouve pas comment faire pour afficher une autre FORM contenant un progressbar pour faire patenter les utilisateur pendant l'extraction de
Controle Utilisateur Problème SplitContainer [ par scottmat ]
Bonjours à tous et à toutes, J'ai créé un contrôle utilisateu
Affichage système [ par pitch6969 ]
bonjour,je souhaiterairécupérer le type d'affichage système en c# :exemple : Windows Standard soit Windows Classique.Est ce que quelqu'un aurait une i
|
Derniers Blogs
TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010TECHDAYS PARIS 2010 : PLAN DE MIGRATION VERS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Arnault Nouvel et Antoine Dongois Le processus à prendre : Apprendre (découvrir la plateforme) Préparer (documenter l'historique et choisir la méthode de MAJ) Test (Test de MAJ) Implémenter (Effectuer la MAJ) Valid...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|