lordm86
Messages postés13Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention 2 août 2007
-
26 juin 2007 à 14:53
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention 9 mars 2011
-
29 juin 2007 à 20:44
Salut , je developpe à peine sous VB.Net.
Je dois faire passer des informations d'un listBox à un autre . En fait quand je le fais sur le meme formulaire, cela fonctionne correctement . Le probleme c'est quand je veux le faire sur deux formulaires differents , sa ne marche pas .C'est à dire , sur mon Formulaire ayant les données, sur un evenement onclick , je veux que la ligne seclionnée aille s'ajouter dans la listebox du second formulaire .
Sur un meme formulair, je fais :
MalistBox1.Items.Add(MalistBox2.SelectedValue)
Mais en mettant MalistBox1 et MalistBox2 dans deux formulaires differents , sa ne marche pas .
J'ai essayé un truc du genre :
MonForm1.MalistBox1.Items.Add(......)
Mais je n'ai aucun resultat......
Si quelqu'un a des idées, qu'il me fasse signe ...svp.....
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention 9 mars 2011 27 juin 2007 à 08:28
[auteurdetail.aspx?ID=2359 Renfield]
:
te faut modifier la portée de MaListBox1, pour qu'elle soit visible de l'exterieur, me semble
propriété Modofoer, je crois (je code pas en .Net) <
<===
ca ne marchera absolument pas en vb.net
le .net est un langage multithread, dans son cas le form1 sera sur 1 thread le form2 sur un autre thread et l'evenement du click bouton sera lui aussi sur un autre thread si jamais il tente de modifié un controle du form1 via le click du form2 il controle va verifier en premier quel est le "ThreadID" de son createur donc l'identifiant unique du thread qui a créé ce controle ici ca sera donc le ThreadID du form1
si jamais il differre tu vas avoir une erreur de securité pour avoir tenté une operation cross thread
Pour palier a ce pb de securité :
il faut créé
* une methode dans le form1 qui va se chargé de verifié cela par le code et actionner "le mecanisme" comme il faut.
* Declarer un delegué pointant sur la methode qui sera charger d'executer le code (celle ci dessus)
* le delegué qui sera chargé de "déléguer" le travail a faire au form1
pour justement que ca soit le bon thread qui execute le code
'Variable de classe du Form1
Friend Delegate Sub ItemAddHandler(sTexte As String)
Private dlgItemAdd As ItemAddHandler
Friend sub ItemAdd(sTexte As String)
If MaListeBox.InvokeRequired Then 'True si le threadId du Thread courrant n'est pas le threadID du createur
dlgItemAdd = New ItemAddHandler(Addressof ItemAdd) 'Auquel cas on instancié un delegué pointant sur la fonction en cour
Me.Invoke(dlgItemAdd, new Object(){sTexte}) 'On invoke le delegué depuis l'instance de la classe en cour : Me (donc le threadID sera le bon)
Else
MaListeBox.Add(sTexte) 'Si le thread ID est le bon => on peux alors modifier le controle
End If
End Sub
comment faire l'appel depuis le Form 2 :
<moninstancedeform1>.ItemAdd("toto")
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 27 juin 2007 à 08:56
je ne met pas en doute ce que tu avances, je ne connais pas .Net
je trouve juste étrange que des threads se créent sans les demander explicitement...
pour moi, la situation me semble (me semblait ?) être la suivante :
Form2.ListBox1.Add ...
ne fonctionnera pas : Form2 est une classe, pas un objet...
lordm86
Messages postés13Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention 2 août 2007 27 juin 2007 à 13:42
Salut ....
En fait ce qui se passe c'est que mon second formulaire ,( celui ou se trouve mes données à transmettre ) c'est une popup (bon peu importe ).
Comme a dit Renfield, j'avais deja tenté de faire "" Dim F2 as New Form2
F2.ListBox1.Add ..."" MAis , sa ne fonctionnait pas . effectivement c'est la premiere idée qui m'est passée à l'esprit .. un peu comme dans VB.6.
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention 9 mars 2011 27 juin 2007 à 18:29
le .net est par default multithread (MTA) tu peux le contraindre en STA (simple thread) mais effectivement sur les evenement il le fait implicimtement
[auteurdetail.aspx?ID=994112 lordm86] : j'ai du faire une erreur de syntaxe qq part regarde dans la doc le "invokerequired" normalement c'est qqchs d'assez similaire les reponse que je post avant 18h15 en general je les fait depuis mon boulot donc : pas de vs.net, pas de doc, juste ma ptite tete et la textebox du site mais cette methode je l'ai deja utilisée pas mal de fois ca tourne autour de ca
lordm86
Messages postés13Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention 2 août 2007 28 juin 2007 à 09:40
Merci encore pour ton aide.
La methode existe bien , mais je crois que le problebe vient du faite que mes formulaires héritent de System.Web.UI.Page et de
SourceCode.K2SmartForms.K2SmartForm
( car j'utilise un workflow K2) pour le formulaire principale.
De ce faite ; les methodes comme showDialog() qui me permettent d'ouvrire un formulaire ne passe pas . (logic .........) car elle n'existe pas dans dans systemeWindow.Forms.form......
La je suis bien perdu ................
lordm86
Messages postés13Date d'inscriptionmercredi 28 février 2007StatutMembreDernière intervention 2 août 2007 29 juin 2007 à 13:18
Slt ToBECo j'avais oublié de précisere que mon appl est pour le web , donc des Webform;
En fiat j'ai compris pourquoi sa ne marchait pas . Et il y a autre chose que je me suis rendu compte , c'est que certaines methode en winform ne sont pas applicaplicables dans ce cas ( logic car elle n'héritent pas de winForm mais de WebForm).
Je voulais savoir si t'as pas des tuto qui traitent de mon pB mais dans le cas des Webform. CAr tout ce que je trouve comme Tuto ne parlent que de WinForm.
Je te remercie. pour lr soutien...........
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDernière intervention 9 mars 2011 29 juin 2007 à 20:44
on peux valider en CrossPostBack en .net 2 donc le rechargement de la page se fait sur une autre webform a partir de la par une simple variable de session ou un event quelquonque tu pourra modifié les valeur comme tu l'entend je pense
lit la doc pour plus de detail sur les validation CrossPage