IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

[VB]Gérer la liaison entre controle utilisateur et form


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 23
    Points : 11
    Points
    11
    Par défaut [VB]Gérer la liaison entre controle utilisateur et form
    Bonjour,
    Mon problème est le suivant :
    Dans mon appli j'ai une form1 dans la quelle j'ai mis des controles utilisateurs qui s'affichent et disparaissent selon mon menu. Jusque la rien de spécial. A l'aide d'un de mes controles utilisateur (ctlCapture), une form2 s'ouvre par dessus mon appli. Il se passe un certain nb de chose sur cette form2 et j'aimerais pouvoir récupérer des valeurs dans mon controle, dans ma form1.

    J'ai déja essayé pas mal de chose :
    remplissage en direct de mon controle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Form_Unload ()
    Form1.ctlCapture1.Text1.Text=Form2.Text1.Text
    Ca marche pas bien sur

    J'ai essayé de passer par un tableau que je déclare dans un module a l'aide de public MyTab () as string

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Form_Unload ()
    MyTab(1)=Form2.Text1.Text
    ctlCapture.Text1.Text=MyTab(1)
    Mais bien entendu, ca je fonctionne pas non plus

    : : :

    Donc je patauge pas mal

  2. #2
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Hello!
    Tu veux que les données passent de ta form2 à ta form1 au moment où tu fermes form2?
    Moi, j'utiliserai l'événement "UserForm_Deactivate()" de Form2. Et dans cet événement, je mettrais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Form1.TextBoxA.Text = Form2.TextBoxB.Text

  3. #3
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    tu peux également, selon toute probabilité, utiliser un module .bas avec des déclarations de variables publiques, ce qui te permettra de les utiliser partout .

  4. #4
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Un autre événement m'a l'air plus adapté:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        'MsgBox ("QueryClose")
        UserForm2.TextBox1.Text = Me.TextBox1.Text
     
    End Sub

  5. #5
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Oui, sans aucun doute, Megaxel.

    Je voulais simplement appeler l'attention de Ooly2001 sur ce qu'étaient les déclarations publiques, afin qu'il en profite pour voir ce que c'est. S'il l'avait su, en effet, il n'aurait peut-être pas posé la question et se serait débrouillé avec.

    Ceci étant, ta solution est de loin la plus adaptée au cas de figure, bien évidemment.


  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Et si il fait un Hide de la form2, qu'il récupère les données dans form1 avant de faire Unload de Form2, ça marche pas ?

    Je n'ai pas le tps d'essayer mais Megaxel ou jmfmarques sauront bien ça...

    A+... tard

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Merci de toutes vos réponses et il s'agit bien de VB6 !

    Mais les solutions ne sont pas adaptées et ne fonctionnent pas.

    Je récapitule :

    J'ai une form (Form1) qui est la fentre principale de mon prog. A l'aide d'un menu, je fais apparaitre des controles utilisateurs. Sur l'un d'eux (ctlCapture1 en l'occurence) je fais apparaitre une autre form (Form2) sur laquelle j'inscris des infos. Je souhaiterais que ces infos (Text1.Text) se retrouvent sur mon controle utilisateur (dans un autre Text1.Text) qui est affiché dans ma fenetre principale (Form1).
    Je recherche la solution la plus simple, soit les infos s'inscrivent "en temps réel" soit à la fermeture de ma Form2.

    Voili voilou

  8. #8
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Tant que tu ne décharges pas (Unload) une Form, ses composants sont accessibles.

    Tu peux donc écrire dans les TextBox d'une Form à partir d'une autre.

    Pour actualiser les changements, il faudra faire l'équivalent d'un Repaint en VBA. Je ne connais plus la méthode en VB (pas installé sur cette machine-ci).
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  9. #9
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bon, je crois avoir compris un peu, sauf :
    Sur l'un d'eux (ctlCapture1 en l'occurence) je fais apparaitre une autre form (Form2)
    Comme je ne vois pas comment on pourrait faire celà, je pense que tu veux dire "en cliquant l'un d'entre eux" et pas "sur l'un d'entre eux" (enfin, sait-on jamais... s'agissant peut-être d'un picturebox tu pourrais toujours, pour t'amuser, y faire apparaître l'image de l'autre form !!!)

    tu dis aussi :
    je fais apparaitre une autre form (Form2) sur laquelle j'inscris des infos. Je souhaiterais que ces infos (Text1.Text).....
    Je pense que tu veux dire : "je frappe dans un textbox de ma form2 un texte que je veux voir figurer dans une textbox de ma form1"

    tu dis enfin :
    soit les infos s'inscrivent "en temps réel"
    Je pense que tu veux dire "simultanément (le temps réel est une autre notion).
    Dans ce cas, il faut que tu places, dans l'événement change du textbox de ta form2, une instruction du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    form1.textbox1.text = form2.textbox1.text
    si form2 est ta form active tu peux remplacer form2 par Me

    Voilà, je pense que tu as là ta solution ainsi qu'un exemple de ce qu'il convient de dire pour être compris facilement de tous.


  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Bonsoir,
    Form_Unload (), c'est toi qui à tappé ce code ??.
    Parceque chez moi celà fonctionne en cliquant sur la croix de fermeture de la Form2, où dans le clic d'un CommandButton (avec Unload Me)
    Dans le module de la Form2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub Form_Unload(Cancel As Integer)
    Form1.Text1 = Form2.Text1.Text
    End Sub
    jpleroisse

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Megaxel
    Hello!
    Tu veux que les données passent de ta form2 à ta form1 au moment où tu fermes form2?
    Exactement mais dans ma Form1 c'est dans "un sous controle utilisateur" ctlCapture.

    Je sais pas si j'ai bien fait mais j'ai donc créé un controle utilisateur (plusieurs pour etre plus exact) et je l'ai ai insérés dans ma form1. et l'un d'entre eux affiche ma Form2. Dans cette Form2, je note certaines chose dans des textbox comme le dit jmfmarques et ces informations doivent etre reportées dans ma form1 dans mon controle utilisateur (dans une textbox) lors de la fermeture de ma form2.

    J'ai un peu tout essayé.

    dans Form2_Unload () donc

    Form2.Text1.Text = Form1.Text1.Text
    Form2.Text1.Text = ctlCapture.Text1.Text
    Form2.Text1.Text = Form1.ctlCapture.Text1.Text
    et encore d'autres choses
    Je me rappelle plus tres bien du message d'erreur mais c'est controle introuvable il me semble

    Je ne trouve pas la solution ..... je patauge .....

  12. #12
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    tu dis

    Exactement mais dans ma Form1 c'est dans "un sous controle utilisateur" ctlCapture.

    Je sais pas si j'ai bien fait mais j'ai donc créé un controle utilisateur (plusieurs pour etre plus exact) et je l'ai ai insérés dans ma form1. et l'un d'entre eux affiche ma Form2
    Expliques-toi mieux car, là, je m'interroge...

    1) ta form2 existe-t-elle dans ton projet en tant que form ?
    2)qu'appelles-tu un sous-contrôle utilisateur ? (définis-le.
    3)qu'entends-tu exactement par "l'un d'entre eux affiche ma form2 ? (il affiche une simple image inerte de ta form2 ou contient-il des contrôles actifs ?

    Je commence à être perdu et me demande si tu n'as pas tout simplement inséré dans ta form1 un cadre dans lequel tu aurais mis des contrôles actifs....

    Décris donc avec précision les objets présents, en 2 listes complètes, genre :

    Ma Form1 contient :
    - un contrôle type_de_controle nommé nom-de-controle1
    - un contrôle type_de_controle nommé nom-de-controle2
    etc...
    - éventuellement : un cadre nommé nom_cadre qui contient les controles :.......liste comme c-dessus

    Ma form2 contient :

    - un contrôle type_de_controle nommé nom-de-controle1
    - un contrôle type_de_controle nommé nom-de-controle2
    etc...
    - éventuellement : un cadre nommé nom_cadre qui contient les controles :.......liste comme c-dessus

    On y verra alors plus clair, peut-être



    Maintenant : si tu as vraiment un Form2 (ce que donne à penser l'événement Unloas évoqué :

    tu a ecrtit :

    Form2.Text1.Text = Form1.Text1.Text
    Form2.Text1.Text = ctlCapture.Text1.Text
    Form2.Text1.Text = Form1.ctlCapture.Text1.Text
    C'est plutôt l'inverse, me semble-t-il : c'est dans Form1 que doivent être reçues les modifications faites dans Form2 !!!

    et enfin :
    et encore d'autres choses
    Je me rappelle plus tres bien du message d'erreur mais c'est controle introuvable il me semble
    1) et encore d'autres choses :!!! en développement, il ne faut pas essayer pour essayer ... n'importe quoi... le développement correspond à des raisonnements précis et non aléatoires, dans tous les sens...
    2) Quand on reçoit un message d'erreur, il faut le noter et le dire aux autres... il est en général révélateur.
    2) tu es dans ta form2 et invoques, sans dire qu'il est dans ta form1, le contrôle ctlCapture.Text1.... qui n'est donc pas trouvé !!!!!!....Non ?

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Bonjour,
    Le plus simple, fais un copier/coller de ton code pour que l'on puisse faire un essai. Parce que chez moi les données d'un TextBox se trouvant dans une Form2, s'inscrivent bien dans le TextBox de ma Form1 à la fermeture de Form2. Et comme dit megaxel, donne plus de précision sur tes contrôles.

    jpleroisse

  14. #14
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    Bonjour leroissejp

    Il faut qu'il réfléchisse un peu et voilà pourquoi :

    La philosophie même de son "application" (écrire ici ce que l'on veut voir là) est curieuse (sauf s'il s'agit d'une appli avec des droits d'utilisation différents selon les utilisateurs et que l'un a l'accés à la Form2 pour écrire et que d'autres ne peuvent que voir dans Form1, sans pouvoir modifier....)

    Il s'agit donc, à coup sur, d'un exercice "scolaire"...

    Il faut donc qu'il s'applique à faire, le plus seul possible, cet exercice...

    La générosité, dans un tel cas, risquerait d'être contre-productive...


  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par jmfmarques
    Il s'agit donc, à coup sur, d'un exercice "scolaire"...
    lol nan alors en fait pour ce qui est de l'exercice scolaire non c'est tout faux. Ca fait longtemps que je ne suis plus a l'école (j'ai 27 ans et en plus mes études n'ont rien à voir avec l'informatique - Ecole de Commerce) bref.

    L'objet de mon post est effectivement d'apprendre de nouvelles astuces je dirais. J'arrive a bien programmé en général (pas des choses tres tres compliqués certes mais je progresse) mais n'ayant eu AUCUNE formation informatique .... j'ai besoin d'aide de temps à autres.

    En ce quui concerne mon appli, c'est une appli qui me servira comme base de données / lecteur multimédia. D'une part j'enregistre mon film dans ma base de données en faisant des captures d'écran, et de l'autre un "viewer" qui permet de naviguer dans la base avec des filtes sur acteurs/ actrices / film etc....

    Je reprend une dernière fois :

    J'ai deux Form dans mon projet (Form1 -la principale - et Form2 que j'expliquerai plus tard), 2 modules de classes (Un avec les déclarations globales et l'autre pour les screencap), et enfin 2 controles utilisateurs (ctlCapture et ctlViewer). Ces deux controles utilisateurs sont insérés dans la form1 (je me suis mis sur la form1, javais mon controle dans ma boite d'outil a gauche, j'ai tracé un cadre dans ma form et voila il est devenu le controle ctlCapture1 dans ma form)


    Dans mon ctlCapture, j'ai la possibilité de faire des screenscaps automatiquement. Ma procédure ouvre ma form2 "Load un controle image" et un controle text et le colle 20 fois dans ma form2 pour avoir mes 20 catures de mon film) Dans le controle image est chargée ma screencap et dans la TextBox le NomDuFilm avec le numéro de la frame prise pas la screencap auto. Sur cette form2, j'ai inséré du code pour avoir un clic droit sur les images qui me permette d'enregistrer 6 photos sur les 6 générées. C'est dans cette procédure que j'ai besoin du report de mon textbox dans mon ctlCapture1

    Voila voila ...

    Merci a ceux qui m'ont donner de leur temps pour m'aider jusqu'a présent et merci a ceux qui ont eu le courage de lire jusque là !!

  16. #16
    Inactif  
    Avatar de jmfmarques
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    3 784
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 3 784
    Points : 4 674
    Points
    4 674
    Par défaut
    S'il s'agit donc simplement de faire apparaître dans Form1.textbox1 le texte frappé en Form2.textbox1, la réponse t'a déjà été donnée.

    Form1.textbox1.text = Me(ou Form2 si tu t'y trouves).textbox1.text

    ce code est à mettre, à ta guise :

    dans l'événement change du textbox1 de ta form2 ou dans l'événement Unload de la form2 ou, en fait, en fonction de l'événement de ton choix (mais un événement).

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Voici l'erreur produite :

    Erreur de compilation
    Methode ou membre de donnée introuvable

    et c'est compréhensible puisque j'ai comme cotrole dans ma form1 uniquement ctlCapture1, ctlViewer1, Image1 et Image2 (pour mes menus) et c'est tout.

    Le Text1 que je souhaire remplir se situe dans la liste des controle de mon controle utilisateur ctlCapture1.

    Donc je me suis dit depuis le début je vais remplir les données de mon Text1 de mon ctlCapture1 de ma Form1

    d'ou le Form1.ctlCapture1.Text1.Text = Form2.Text2.Text

    je me doute qu'il doit y avoir un petit truc du genre

    Form1.Controls(ctlCapture1).Text1.Text = Form2.Text1.Text

    mais je ne connais pas la formulation exacte

  18. #18
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Citation Envoyé par Ooly2001
    Erreur de compilation
    Methode ou membre de donnée introuvable
    Tu tentes d'utiliser une propriété qui n'existe pas

    Citation Envoyé par Ooly2001
    d'ou le Form1.ctlCapture1.Text1.Text = Form2.Text2.Text
    Le problème vient de la propriété Text de ton controle utilisateur ctlCapture

    SI j'ai bien compris, le controle Text1 fait partit de ton controle utilisateur, tu ne peux donc pas lui affecté une valeur directement
    Tu dois définir une propriété Text a ton controle ctlCapture genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Public Property Get Text() As String
        Text = Text1.Text
    End Property
     
    Public Property Let Text(ByVal New_Text As String)
        Text1.Text = New_Text
        PropertyChanged "Text"
    End Property
    Puis tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.ctlCapture1.Text = Form2.Text2.Text
    Si j'ai pas compris, je m'en excuse par avance
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Thierry AIM
    SI j'ai bien compris, le controle Text1 fait partit de ton controle utilisateur, tu ne peux donc pas lui affecté une valeur directement ...
    C'est exactement ca !!! MERCI beaucoup, c'était pas facile à expliquer !

    J'essaierai ta "formule" des que j'ai acces a mon PC ....

    Je vous tiendrai au courant de l'évolution

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Merci beaucoup Thierry AIM, c'était exactement mon problème, et la il est résolu. Il fallait effectivement définir une propriété Text a mon controle.

    Je tente maintenant de faire la meme chose mais pour une picture.

    Merci beaucoup de ton aide et merci aussi aux autres membres de ce forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Communication entre controles utilisateurs
    Par Damran dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/02/2009, 10h37
  2. transfert entre formulaire, panneau et controle utilisateur
    Par Ouija33 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 30/01/2008, 15h49
  3. [1.0.2][Zend_db_table] Gérer les liaisons entre les tables
    Par Baptiste Wicht dans le forum Zend_Db
    Réponses: 8
    Dernier message: 05/10/2007, 10h00
  4. partager un schema entre plusieurs utilisateurs
    Par jrman dans le forum Oracle
    Réponses: 5
    Dernier message: 15/12/2004, 17h53
  5. Liaison entre un dblookupcombobox (filtre) et un dbgrid
    Par naw dans le forum Bases de données
    Réponses: 9
    Dernier message: 22/08/2004, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo