IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[C#][ProgressBar]Obtenir les données depuis un autre objet


Sujet :

Windows Forms

  1. #1
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut [C#][ProgressBar]Obtenir les données depuis un autre objet
    Bonjour,

    J’ai un petit problème avec l’implémentation d’un contrôle ProgressBar dans une WinForm, plus particulièrement avec la mise à jour de la progression d’une tâche.

    Voici le schéma de ma structure de classe :



    Ma WinForm contient un objet Facade qui fait appel à l’objet DbManager pour charger des données.

    Je dois charger des objets à partir d’une DataView située dans le DbManager et j’aimerai mettre à jour l’avancement dans la ProgressBar à chaque fois que je passe au DataRow suivant dans la méthode Chargement().

    J’ai essayé de passer par une variable integer, "progression", dont je passe la référence à la Facade puis au DbManager.
    La valeur de "progression" est ainsi modifiée à chaque fois que je passe à une DataRow suivante dans mon DbManager.
    J'ai ensuite essayé de créer un Thread dans ma WinForm pour mettre à jour la ProgressBar, mais cette façon de faire génère des erreurs et me paraît quelque peu brouillon.

    J'ai vu qu'il était possible de mettre à jour l'avancement de la ProgressBar en créant un évènement particulier. Est-ce que cette implémentation est possible dans la structure de classes mentionnée ci-dessus :
    Est-ce qu'un événement déclenché dans le DbManager pourra être récupéré dans la WinForm :

    Merci à la personne qui pourra m'aider.

  2. #2
    Nouveau membre du Club Avatar de yoyann
    Inscrit en
    Juillet 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Vu que tu retourne ta valeur de la progression jusqu'a t'as progressBar, tu peux faire une fois que tu change la valeur de ta ProgressBar tu fais un Application.DoEvents(); juste après à l'endroit ou tu change la valeur de ta progressBar ce qui veut dire au niveau de ta Form.

  3. #3
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut
    Salut yoyann,

    Je me suis peut-être mal exprimé.

    Je ne retourne pas directement la valeur de la progression jusqu'à la ProgressBar. J'ai bien tenté de passé la propriété ProgressBar.Value en tant que paramètre ref int, inutile de dire que VS n'a pas aimé...

    Dès lors, je me suis demandé s'il fallait créer un Thread qui lit la valeur de la progression et met à jour la propriété value de ProgressBar. Mais je n'y suis toujours pas parvenu.

    Je me demande toujours si abonner ma ProgressBar à un événement, par exemple onValueChanged, serait une bonne pratique.

    Merci pour ton aide

  4. #4
    Nouveau membre du Club Avatar de yoyann
    Inscrit en
    Juillet 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    Ce n'est pas possible que tu puisses à partir de ta classe singleton quand tu affectes le niveau de progression de int, puisqu'avec un proprieté tu peux mettre du code quand tu affectes une valeur ?

    Mais en d'après ce que tu me dis tu veux changer la valeur des que ton int de ta classe singleton change, donc il faudrait que tu créer un evenment au niveau de classe singleton, Dans ta Form tu t'abonnes a l'évènement de ta classe singleton,
    Puis dans ta methode qui est exécutée quand ton évènement ce déclenche => tu changes la valeur de ta progressBar et tu fais un Application.DoEvents();

  5. #5
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut
    Citation Envoyé par yoyann
    Ce n'est pas possible que tu puisses à partir de ta classe singleton quand tu affectes le niveau de progression de int, puisqu'avec un proprieté tu peux mettre du code quand tu affectes une valeur ?
    J'avoue que je n'ai pas tout compris...

    Citation Envoyé par yoyann
    Mais en d'après ce que tu me dis tu veux changer la valeur des que ton int de ta classe singleton change, donc il faudrait que tu créer un evenment au niveau de classe singleton, Dans ta Form tu t'abonnes a l'évènement de ta classe singleton,
    Puis dans ta methode qui est exécutée quand ton évènement ce déclenche => tu changes la valeur de ta progressBar et tu fais un Application.DoEvents();
    En substance, c'est cela.

    Je vais essayer tout cela et te redis.

    Merci et à plus.

  6. #6
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut
    J'essaie, j'essaie...

    Mais j'ai tout de même une petite question qui me préoccupe :
    La portée d'un événement est l'application en cours, est-ce bien correct :

  7. #7
    Nouveau membre du Club Avatar de yoyann
    Inscrit en
    Juillet 2005
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 37
    Points : 29
    Points
    29
    Par défaut
    La porté d'un evenement se limite a la portée de ta classe qui contient l'évenement et aussi que l'instanciation de ta classe soit la même.
    Dans ton cas c'est la portée de ta classe FACADE.

    Donc comme je l'avais dit hier, il faut que tu créé un évenement sur la valeur de ton int qui change dans ta classe Facade, puis dans ta Form que tu t'abonnes à l'évenement de la classe Facade,
    Et comme tu utilises une classe singleton tu utilises la même instance de ta classe Facade partout donc pas de problème normallement.

  8. #8
    Membre confirmé Avatar de Kcirtap
    Inscrit en
    Juillet 2005
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 553
    Points : 523
    Points
    523
    Par défaut
    Après quelques heures de

    J'ai bien failli mon ordinateur (bien que cela ne soit jamais la source du problème, mais cela fait beaucoup de bien )

    Je suis finalement parvenu à obtenir ce que je voulais

    et j'y vois plus clair aux mécanismes des événements.

    beaucoup yoyann pour le temps que tu as passé à me transmettre tes explications

    Bonne journée

    Patrick

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Importer les données depuis une DB vers une autre
    Par mamiberkof dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/03/2007, 15h52
  2. Réponses: 3
    Dernier message: 09/04/2006, 12h58
  3. Réponses: 1
    Dernier message: 20/12/2005, 15h56
  4. Importer seulement les données d'un autre base
    Par Tunisiano32 dans le forum Access
    Réponses: 5
    Dernier message: 29/10/2005, 09h37
  5. récupérer juste les données d'une autre table
    Par rangernoir dans le forum Access
    Réponses: 5
    Dernier message: 13/09/2005, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo