Bonjour à tous;
Suis plutôt novice en C#, mais suis parvenu à faire un petit projet de sauvegarde de répertoires vers un autre disque dur ...
Je vais essayé d'etre bref: Dans ma WinForm, j'ai deux ListBox où je choisis le Dir origine et le Dir destination (sur des disques differents)...Une fois mon choix effectué, je lance l'operation de sauvegarde sur un thred secondaire... c'est lui qui ecrit dans une autre ListBox de détail du déroulement des opérations: création ou suppression de repertoires, copie ou suppression de fichiers .... et tout cela fonctionne à merveille.
Mais je voudrai améliorer le confort de l'utisateur en le prevenant lors d'une copie de gros fichiers (video)... pour le faire patienter et lui donner l'information de copie ...
Ma première idée était d'afficher un control "label" et lui renvoyer l'info de la copie (Visible=true en debut de copie .. et Visible = false en fin de copie ...).Malgré la bonne éxécution du prog, aucun " label" ne s'affiche (j'imagine qu'il s'affiche derrière la ListBox où sont historisés le déroulement des opérations). Alors comment le faire afficher pour qu'il soit visible sur l'ecran???
Ma seconde idée etait d'afficher une "MessageBox" avec la même info pour l'utisateur. Cette solution fonctionne mais je voudrais m'affranchir du click opérateur puisque le nombre de copie peut etre conséquent. Est il possible d'afficher une "MessageBox" durant quelques secondes sans intervention de l'utilisateur???? La première solution est celle que j'adopterai si ca marche...
Je vous donne le code de ma méthode dont le principe est :
- Premier appel de la méthode au début de la copie de fichier ==> affichage du "label" au premier plan informant l'utilisateur.
- Deuxième appel de la méthode (txt = "f_e_r_m_e_r" ) qui doit fermer le "label".
Si je décoche MessageBox::Show la box s'affiche bien. Mais tel que la textbox ne s'affiche pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public: void affich_label_de_thread( String^ txt) {if (this->textbox_thread->InvokeRequired){MonDelegateHandler^ del_async_1 = gcnew MonDelegateHandler(this, &Form1::affich_label_de_thread);this->textbox_thread->Invoke(del_async_1, txt);}else{if (txt->String::Contains("f_e_r_m_e_r")){this->textbox_thread->Visible = false;}else{//MessageBox::Show(txt," Patience !!!");this->textbox_thread->Enabled;this->textbox_thread->Visible = true;this->textbox_thread->Text = txt;} // fin du else} // fin du else} //fin de la methode
Enespérant avoir été assez clair, Grand merci d'avance pour votre aide.
(Suis désolé, je n'ai pas réussi à mieux concentrer mon code , la fonction [IDENT] de l'éditeur ??? Dites moi comment procéder à l'avenir)
Partager