OVH Cloud OVH Cloud

Rafraichissement Controle

2 réponses
Avatar
Keikun
Bonjour

J'ai un problème avec le rafraichissement de controle.

Voici l'enchaînement des traitements :

- J'ajoute un texte dans un richTextBox
- Je parcours un ArrayList composé de 200 objets
- Pour chaque objet, j'ajoute un noeud dans une TreeView, pour chaque
noeud, je rajoute des sous noeuds

Dans ma boucle qui parcours mon ArrayList, je change la value d'une
progressBar. Cela marche quand j'ai 100 objets mais pas 200 objets.
De plus quand la TreeView est chargée, dans le cas de 200 objets,
progressBar n'a eu aucun changement de valeur.
Idem avec une données que je mets à jours dans un panel d'une statusBar.

J'ai déjà mis un refresh sur ma progressBar est cela ne change rien.

/********
* CODE SOURCE
* Une partie des traiements
*/

rTBLog.Text = "Lancement de la réplication";
rTBLog.Text += Environment.NewLine;
rTBLog.Refresh();
pB.Value = 0;

clients = intranet.getClients();

int nbpourclient = 100/clients.Count;

foreach(Client c in clients)
{
TreeNode nodeClient = new TreeNode(c.CAB+" - +c.NomCommercial);
nodeClient.Tag = c;
tVClient.Nodes.Add(nodeClient);

tVClient.Refresh();
pB.Value = pB.Value + nbpourclient;
pB.Refresh();
sBPPourcentage.Text = pB.Value.ToString()+"%";
}

// ----------------------------------------------

Cordialement.

2 réponses

Avatar
Keikun
Keikun wrote:
Bonjour

J'ai un problème avec le rafraichissement de controle.

Voici l'enchaînement des traitements :

- J'ajoute un texte dans un richTextBox
- Je parcours un ArrayList composé de 200 objets
- Pour chaque objet, j'ajoute un noeud dans une TreeView, pour chaque
noeud, je rajoute des sous noeuds

Dans ma boucle qui parcours mon ArrayList, je change la value d'une
progressBar. Cela marche quand j'ai 100 objets mais pas 200 objets.
De plus quand la TreeView est chargée, dans le cas de 200 objets,
progressBar n'a eu aucun changement de valeur.
Idem avec une données que je mets à jours dans un panel d'une statusBar.

J'ai déjà mis un refresh sur ma progressBar est cela ne change rien.

/********
* CODE SOURCE
* Une partie des traiements
*/

rTBLog.Text = "Lancement de la réplication";
rTBLog.Text += Environment.NewLine;
rTBLog.Refresh();
pB.Value = 0;

clients = intranet.getClients();

int nbpourclient = 100/clients.Count;

foreach(Client c in clients)
{
TreeNode nodeClient = new TreeNode(c.CAB+" - +c.NomCommercial);
nodeClient.Tag = c;
tVClient.Nodes.Add(nodeClient);

tVClient.Refresh();
pB.Value = pB.Value + nbpourclient;
pB.Refresh();
sBPPourcentage.Text = pB.Value.ToString()+"%";
}

// ----------------------------------------------

Cordialement.



A voir mon problème vient de la valeur que j'incrémente et non d'un
problème de rafraissement.

Je doit juste convertir le 100/clients.Count en un entier.
Avatar
Sebastien Curutchet
Keikun wrote:
Keikun wrote:

Bonjour

J'ai un problème avec le rafraichissement de controle.

Voici l'enchaînement des traitements :

- J'ajoute un texte dans un richTextBox
- Je parcours un ArrayList composé de 200 objets
- Pour chaque objet, j'ajoute un noeud dans une TreeView, pour chaque
noeud, je rajoute des sous noeuds

Dans ma boucle qui parcours mon ArrayList, je change la value d'une
progressBar. Cela marche quand j'ai 100 objets mais pas 200 objets.
De plus quand la TreeView est chargée, dans le cas de 200 objets,
progressBar n'a eu aucun changement de valeur.
Idem avec une données que je mets à jours dans un panel d'une statusBar.

J'ai déjà mis un refresh sur ma progressBar est cela ne change rien.

/********
* CODE SOURCE
* Une partie des traiements
*/

rTBLog.Text = "Lancement de la réplication";
rTBLog.Text += Environment.NewLine;
rTBLog.Refresh();
pB.Value = 0;
clients = intranet.getClients();
int nbpourclient = 100/clients.Count;
foreach(Client c in clients)
{ TreeNode nodeClient = new TreeNode(c.CAB+" -
+c.NomCommercial);
nodeClient.Tag = c;

tVClient.Nodes.Add(nodeClient);
tVClient.Refresh();
pB.Value = pB.Value + nbpourclient;
pB.Refresh();
sBPPourcentage.Text = pB.Value.ToString()+"%";
}

// ----------------------------------------------

Cordialement.




A voir mon problème vient de la valeur que j'incrémente et non d'un
problème de rafraissement.

Je doit juste convertir le 100/clients.Count en un entier.




1/ Je te conseille de mettre comme valeur max de ta progressbar le
nombre d'élément de ton ArryaList de faire un incrément de 1 à chaque
itération.

2/ Pour éviter le problème de rafrachissement tu as à ta disposition la
méthode Invoke ou BeginInvoke/EndInvoke.
Voici un exemple : http://drq.developpez.com/dotnet/articles/threads/#L5.1

En espérant que ça t'a aider.
Sébastien Curutchet