Vb.net, problème d' affichage d'un formulaire

Résolu
cs_drahcir Messages postés 745 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 15 septembre 2009 - 9 juin 2005 à 15:22
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 - 23 juin 2005 à 11:43
Salut à tous,

Voici mon problème :

mon appli possède deux formulaires. A l'exécution du code, le premier doit lancer le second qui ne possède aucun code. Celui-ci me sert juste à afficher un message d'attente, le temps qu'un traitement s'exécute.

Dans le "Load" de mon premier formulaire :

form2.Show()
'Traitement
form2.Hide()

Mon second formulaire s'affiche puis, le traitement se fait et enfin, le second formulaire disparaît. Le problème, c'est que le message présent dans form2 (qui est un Label) est invisible!!! J'ai essayé avec d'autres contrôles, mais j'ai obtenu le même résultat : aucun d'entre eux n'est lisible, j'obtient un espace blanc à la place.

Est-ce un bug de l'affichage, est-ce mon PC qui coïnce??????

Si quelqu'un sait d'où cela peut venir, je suis preneur........

Merci, @+

13 réponses

dragounet Messages postés 5 Date d'inscription mercredi 14 mai 2003 Statut Membre Dernière intervention 23 juin 2005
20 juin 2005 à 13:01
Bonjour,

Si j'ai bien compris ton problème c'est que tu as une form qui est sensé afficher un message d'attente pendant que tu fais ton traitement.
As-tu essayé de faire un ta_form.refresh() juste après ton ta_form.show() ?
j'avais déjà rencontré ce type de problème.
En fait, ton programme base toutes les resources sur le traitement et non sur l'affichage graphique.
Donc essaye ce truc, je pense que ça pourrait t'aider.
3
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
9 juin 2005 à 21:53
bon j'ai pas trop compris ce que tu voulai, il me faudrait plus d'infos

voici ce que je pense que tu veut faire, 3 solution: (corrige moi si c'est pas bon):

1ere:

nous avons dans un ordre chronologique

-tu affiche une form2

-tu fait un traitement

-tu retire cette form2

-et enfin tu veut recuperer des données dans la form2
reponse a ce
probleme: tu ne peut plus recuperer de données quand la form2 est hide.
Elle est considerée comme inexistante, pourtant tu veut qu'elle ne soit
plus visible, corrige donc sa propriété visible a false



2eme

tu veut recuperer des données d'un controle (ici label1) de ta form2

reponse: ne marche que si tu as mis ce code avant form2.show (que tu as probablement mis)

dim form2 as new form2

form2.show

ta_variable = form2.label1.text 'il faut annoncer la form du controle

form2.hide



3eme

tu veut inscrire des données dans ce controle

reponse:

dim form2 as new form2


form2.show

form2.label1.text = "ce que tu veut"


form2.hide



voila je sais pas si ce que tu veut est la dedans mais je suis dsl
t'est pas assez clair dans ce que tu veut faire, envoie moi plus d'info
voire ton bout de code, ca fé pas de mal


@+

L U C Y I3 E R @ D
0
cs_drahcir Messages postés 745 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 15 septembre 2009 4
9 juin 2005 à 22:30
Salut, et merci de te pencher sur mon problème.


Je crois que je n'ai pas été trés clair. En fait, ma form2 me sert simplement à afficher un message d'attente, le temps que mon traitement se fasse.


Je n'ai pas besoin de récupérer de données de ce formulaire.


Le problème, c'est que lorsque ce formulaire s'affiche, le message qui s'y trouve (dans un label) est invisible. Je ne comprend pas pourquoi!!!
J'ai testé avec une image et d'autres composants, même résultat.

Le seul composant qui fonctionne, c'est le TreeView.........

Alors là, je ne pige que dallllllllllll.

Si ça peut te permettre d'y voir plus clair......... et surtout de résoudre mon problème

En tout cas, merci pour ton aide.

@+
0
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
10 juin 2005 à 08:24
bon en effet j'ai compris ton probleme et il est vrai que c'est assez
bizzare..., le mieux serait que tu essaye de supprimer et refaire cette
form.

Il de plus bizzare que seul un treeview fonctionne.

Si le fait de refaire la form ne fonctionne pas: n'hesite pas a me le signaler.

question annexe: utilise tu une version beta de whibey (VS 2005)?

@+

L U C Y I3 E R @ D
0

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

Posez votre question
cs_drahcir Messages postés 745 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 15 septembre 2009 4
10 juin 2005 à 12:07
Salut,

suite à tes conseils, j'ai refait la form mais le résultat est le même.
En réponse à ta question annexe : non, j'utilise un vb.net 2003.

Et enfin, il n'y a pas que le treeview qui fonctionne, la progressBar marche trés bien. Je pense donc que je vais opter pour cette solution. Je sais que c'est contourner le problème, mais à défaut d'autre chose..... Je vais donc afficher un message dans le bandeau de ma form, et ajouter une progressBar.

En tout cas, merci pour tout et @+

P.S : si tu trouves des infos à ce sujet, n'hésite pas à m'en faire part.
0
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
10 juin 2005 à 19:16
bon c'est pas que j'ai aps envie de t'aider (loin de la ca me fait
plaisir) mais il s'avere que ton probleme est tre compliqué du fait que
ont as pas assé d'elements, si tu veut tu peut me filer ton code et je
regarde si ca marche ché moi ok?



si tu veut pas ben @+ et quand meme ravi d'avoir fais ta connaissance (meme si j'ai aps pu t'aider )
@+

L U C Y I3 E R @ D
0
cs_drahcir Messages postés 745 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 15 septembre 2009 4
20 juin 2005 à 14:03
Salut dragounet,

d'abord merci d'avoir jetté un coup d'oeil à ce post. Ensuite, un deuxième merci, car ta solution fonctionne à merveille!!!! Je viens de faire le test et ça résoud mon problème (que j'avais mis de côté en attendant...). Je regrette juste de ne pas y avoir penseé tout seul

En tout cas merci à toi

@+
0
dragounet Messages postés 5 Date d'inscription mercredi 14 mai 2003 Statut Membre Dernière intervention 23 juin 2005
21 juin 2005 à 09:05
De rien Drahcir, c'est tout à fait normal. Je pense qu'entre développeur, on doit se donner un coup de main.
Bon aller à plus
0
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
21 juin 2005 à 10:37
dsl de me réincruster mais en fait ce sujet ce rapporte en fait plus au
probleme que j'ai actuellement; en effet le .refresh est aproprié du
moment que il n'y est qu'un label dans la form.

imaginons maintenant que pendant qu'il travaille; on veuille mettre un
bouton "stopper" sur cette nouvelle form, des lors l'effet du bouton ne
sera pris en compte que lorsque le traitement sera terminé !

pour faire simple, la solution se trouve dans le multhreading...

explication des threads: (ca peut toujours servir au debutant qui
regarde ce post si vous savez ce que c'est) un thread (en francais
c'est: tâche), en effet lorsque on programme; tout est effectué sous un
seul thread; l'affichage, le traitement, tout le code sauf si on lui
dit que creer en parrallèle un autre systeme de tache; pour faire
simple: nous avons un liste de code effectué par le processeur quand
nous tapons du code; pour en revenir a ton probleme, il suffit de creer
un autre thread qui vas gerer l'affichage, en effet on vas creer un
deuxieme "liste de code" qui marchera en parrallèle de la 1ere; donc on
peut par exemple demander au premier thread de ne rien faire (pas de
code mais il fait quand meme un truc il gere l'affichage ce qui vas
rendre notre bouton cliquable) et au deuxieme de faire le sale boulot ^^

voici ce que nous auront donc comme code:

<hr>public sub travail_a_effectuer()

'on mets ici le code qui vas faire le sale boulot

end sub



'on demande a creer un nouveau thread
Dim Thread1 As New System.Threading.Thread(AddressOf 
travail_a_effectuer
)
'ce qui suit AdressOf est la fonction que vas realiser le thread
Thread1.Start 'on demmare le thread

'on fait un evenement pour le boutton
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Thread1.Abort 'on demande au thread de s'arreter
end sub



<hr>
Voila c'est plutot compliqué a comprendre mais j'ai donné les bases,
si vous voulez vous pouvez allez sur la msdn de Micro$oft qui explique ce sujet mieux que moi (c'est eux qui l'ont crée apres tout ^^)
voici le lien du sujet sur le multithreading:
http://www.microsoft.com/france/msdn/technologies/outils/vbasic/info/info.asp?mar=/france/msdn/technologies/outils/vbasic/info/vbtchasyncprocvb.ht



@+

L U C Y I3 E R @ D
0
cs_drahcir Messages postés 745 Date d'inscription mardi 30 novembre 2004 Statut Membre Dernière intervention 15 septembre 2009 4
21 juin 2005 à 10:52
Salut,

j'ai bien pensé (et même essayé) de faire du multi-threading pour résoudre mon problème, mais ça n'a pas marché. J'ai utilisé le ^même procédé que celui que tu décris mais j'avais toujours mes problèmes d'affichage...
De plus, dans ma méthode "travail_a_effectuer", j'avais mis : form1.show(). Le problème, c'est que Thread1.Stop() ne permettait pas de faire form1.Hide(), il fallait donc faire un autre Thread contenant form1.Hide()... bref, un peu lourd.

En revanche, si à l'avenir, j'aurais besoin de "stopper" l'exécution, je pense qu'il faudra bien que j'utilise le multi-threading.

Mais merci pour ces précisions, je pense qu'elles pourront être utile à beaucoup de développeurs....

@+
0
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
21 juin 2005 à 16:21
Alors en effet le GROS blem du multithreading c'est que non seulement
c'est dur mais si c'est mal fait c'est une plaie ! le plantage est
assuré !

par exemple moi je doit m'en servir puisque je veut faire une requete
sur internet, j'ai mis 10 second avant que ca ne finisse de demander
sur internet, mais pendant ces 10 secondes; mon programme est
completement innacessible (ne repond pas) pendant ces 10 seconde je
n'ai donc pas eux le choix que de mettre ca dans un otre thread. Mais
le gros souci c'est que les thread communique difficilement des infos
entres eux; donc le multithreadind c'est super mais : -quand on le
maitrise; -quand ca veut bien marcher...; -quand on en as vraiment
l'uilité.

c'est pour ca que tu verra rarement un tutoriel de niveau 1 ou debutant quelque part (ou c'est pas un bon tuto).

voila c'est juste une alternative qui s'avere utile quand on as
beaucoup plus de données a utiliser, quand ca bouffe beaucoup plus de
ressource.


@+

L U C Y I3 E R @ D
0
dragounet Messages postés 5 Date d'inscription mercredi 14 mai 2003 Statut Membre Dernière intervention 23 juin 2005
23 juin 2005 à 09:44
Bonjour,

Si vous avez des problèmes avec les threads, pourquoi ne pas utiliser les timer (un truc déjà plus connu) qui sont plus facilement gérables.
En ce qui me concerne, j'ai développé des applications qui utilisaient des threads, mais il m'arrivait souvent de rencontrer des problèmes. Et depuis que j'ai mis des timer à la place, plus aucun problème.

@+
dragounet
0
Lucyberad Messages postés 414 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 26 juillet 2007 3
23 juin 2005 à 11:43
Franchement j'arrive pas a voir comment des tiers peuvent remplacer des
threads; mais je suis ouvert a tout et j'aimerais bien que tu m'indique
une source ou meme que tu me donnes des infos car je vois pas comment
ca paut remplacer les threads.

merci
@+

Lucyberad
0
Rejoignez-nous