C# - affiché une messagebox depuis une classe [Résolu]

Karibot 89 Messages postés mardi 19 janvier 2010Date d'inscription 21 juin 2016 Dernière intervention - 27 sept. 2010 à 14:52 - Dernière réponse : LUDINSKI 441 Messages postés mardi 2 décembre 2003Date d'inscription 22 mai 2012 Dernière intervention
- 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.
Afficher la suite 

5 réponses

Répondre au sujet
Tilois 721 Messages postés dimanche 10 juin 2001Date d'inscription 27 mars 2011 Dernière intervention - 28 sept. 2010 à 15:51
+3
Utile
bonjour,

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

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

Bonne journée
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Tilois
LUDINSKI 441 Messages postés mardi 2 décembre 2003Date d'inscription 22 mai 2012 Dernière intervention - 28 sept. 2010 à 20:27
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de LUDINSKI
Karibot 89 Messages postés mardi 19 janvier 2010Date d'inscription 21 juin 2016 Dernière intervention - 29 sept. 2010 à 12:01
0
Utile
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?
Commenter la réponse de Karibot
Tilois 721 Messages postés dimanche 10 juin 2001Date d'inscription 27 mars 2011 Dernière intervention - 29 sept. 2010 à 13:26
0
Utile
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.
Commenter la réponse de Tilois
LUDINSKI 441 Messages postés mardi 2 décembre 2003Date d'inscription 22 mai 2012 Dernière intervention - 29 sept. 2010 à 19:12
0
Utile
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 !
Commenter la réponse de LUDINSKI

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.