C# - affiché une messagebox depuis une classe

Résolu
Karibot Messages postés 89 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 juin 2016 - 27 sept. 2010 à 14:52
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 - 29 sept. 2010 à 19:12
Bonjour,
j'ai un programme qui fonctionne avec une interface windows form. il fonctionne très bien sauf qu'il ne m'avertit pas lorsqu'il fini les calculs. j'essaye donc de trouver une astuce pour qu'il m'affiche un message lors que les calculs sont finis et ce n'est pas de la tarte...
ce que j'essaye de faire ce n'est pas de créer un messagebox depuis le form mais plutot de donner l'ordre depuis ma classe de lancer un messagebox ! (je ne sais pas si je suis claire !?)

je ne souhaite pas utiliser une barre de progression parce que cela me semble trop compliqué. je veux juste un message qui me dit: 'C'est bon, j'ai fini'.
pour cela j'ai utilisé 2 trucs (qui ne fonctionnent pas, pour le moment):
throw new Exception("Fin des calculs");
[code=cs]
cela me génére une exception (ce qui est normal) mais on m'a dit que cela pouvais aussi créer une boite de dialogue avec le message souhaité...

[code=cs]
throw new System.Windows.Forms.MessageBox.Show(owner, "Fin des calculs");

trouvé sur un forum et aussi sur http://msdn.microsoft.com/en-us/library/cked7698(v=VS.80).aspx
qui est sensé réponde au problème mais je ne vois pas ce que pourrait être le paramètre owner
merci pour votre aide.

5 réponses

Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
28 sept. 2010 à 15:51
bonjour,

pas besoin d'écrire un throw new devant....

un simple:
System.Windows.Forms.MessageBox.Show("Fin des calculs");

Bonne journée
3
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
28 sept. 2010 à 20:27
Sinon, plus propre...

Tu lances un évènement depuis ta classe du genre OnTaskDone !!!

Pour ce faire ;)

Dans ta classe :
1) tu déclares ton évènement
public event EventHandler OnTaskDone;

2) Quand le boulot est fini tu déclenches l'évènement
if (OnTaskDone != null)
OnTaskDone(this, new EventArgs());

Et dans ton formulaire :
1) Après l'instanciation de ta classe
taClasse.OnTaskDone += new EventHandler(taClasse_OnTaskDone);

2) Et bien sûr
void maClasse_OnTaskDone(object sender, EventArgs e)
{
MessageBox.Show( "Voilà ! tout est là ;)");
}

En espérant t'avoir aidé !!!
Bonne continuation
3
Karibot Messages postés 89 Date d'inscription mardi 19 janvier 2010 Statut Membre Dernière intervention 21 juin 2016 2
29 sept. 2010 à 12:01
Merci à vous deux pour vos réponses pertinentes.
je pousse un peu plus loin la réflexion: et si au lieu d'attendre que la tache soit finie avant d'envoyer le message de fin, je faisais autre chose en 'temps réel'? je m'explique:
mon programme traite des des mots clés, je pense faire un truc qui dit: vous avez traité k mots sur n. cela s'afficherait dans une messageBox (ou autre sans le 'OK') et défilerait en fonction de l'avancement du traitement (ex: 4/56).
faire peut-être un truc genre: System.Windows.Forms.MessageBox.Show("{0}/{1}", iCurrent, iLen);
où: iCurrent = index du mot clés courrent
et
iLen = length de mon tableau de mots clés.

qu'est ce que vous en pensez?
0
Tilois Messages postés 721 Date d'inscription dimanche 10 juin 2001 Statut Membre Dernière intervention 27 mars 2011 7
29 sept. 2010 à 13:26
Bonjour,

Pour une message box avec le texte qui change, cela n'est pas possible (à ma connaissance).

Il va falloir te tourner vers une solution avec une form supplémentaire pour afficher l'avancement de ta tâche. Cette form sera surement avec la propriété topmost = true pour toujours être au premier plan.

Pour suivre l'avancement, je te conseille de regarder du coté du backgroundworker qui permet de faire une tâche de manière asynchrone tout en suivant l'avancement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LUDINSKI Messages postés 441 Date d'inscription mardi 2 décembre 2003 Statut Membre Dernière intervention 22 mai 2012 8
29 sept. 2010 à 19:12
Tout à fait d'accord avec Tilois...

Si c'est un traitement long, il ne faut pas l'appeler depuis ton formulaire directement. Autrement tu vas "frizzer" ton application.
Il vaut mieux utiliser BackgroundWorker en effet !
0
Rejoignez-nous