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 :

Ajout automatique d'une form


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut Ajout automatique d'une form
    Bonjour a tous,

    je créé un petit projet qui doit me permettre de créer une form sur un evenement (click ou autre). Le problème est que j''ai essayé d'utiliser la fonction me.controls.add (vb.form, "MaFeuille") mais ca ne fonctionne pas. erreur: type mistasch sur cette ligne. je voudrais savoir si c'est possible d'ajouter une form sur un evenements et d'y créer automatiquement un control dedans.

    en attendant vos réponse je vous remercie de me lire.

  2. #2
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    si tu veux créer une copie de ta feuille actuelle qui comporte un bouton de commande par exemple tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Private Sub Command1_Click()
    Dim toto As New Form1
    toto.Show
    End Sub
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    Eh bien une form est un objet instanciant la classe "Form", et la fonction que tu emploies n'admet que des objets dérivants de la classe "Control".

    "Form" n'héritant pas de "Control", ça ne peut pas marcher.

    Pour essayer de t'aider, je dirais qu'il te faut

    1) créer une deuxième form construite en mode création comme tu l'entends (appelons là frmTaForm)

    2) Dans ta fonction, ajouter le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Function Evenenement_Quelquonque()
    [...]
    dim objTaForm as frmTaForm
        [...]
        set objTaForm = new frmTaForm
        objTaForm.show vbModal
        Unload objTaForm
        set objTaForm = nothing
        [...]
    End Function
    Le vbModal n'est qu'une façon de faire j'ignore le contexte de ton dev donc cela sera p-e inapproprié.

    a+

  4. #4
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    je pense que c'est ce que je veut faire mais j'ai une erreur de compilation :user-defined user type not defined. si tu sais de ou ca vient ca m'arrangerai. autre question, avec ce bout de code, c'est sensé me copier la feuille et le code ou juste les controles deans la feuille.

    Merci de m'avoir répondu et d'aider les gens dans la galère.lool.

    en fait je voudrais ne pas créer les forms a l'initialisation, car j'ai besoin qu'elle se crée sur un évènement. au moment ou je programme je ne sais donc pas combien j'aurai de form qui seront crées.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    Lorsque tu "conçois" (je ne sais pas comment appeler ça autrement) une form en mode création sous VB, tu ne fais que faire le moule, elle n'existera pas automatiquement lors de l'exécution du programme.

    La séquence d'initialisation que j'ai donnée 3 posts plus haut (ohmonbato aussi d'ailleurs) te permet à cet instant de créer l'objet.

    Enfin sache qu'il est impossible de créer dynamiquement des classes de form VB telles que tu l'entends.

    Tu peux éventuellement ne faire qu'une seule form générique, qui contiendrait tous les controles sous la forme de tableaux de controles avec leur premier élément (le 0) à invisible, afin de les multiplier / placer à la volée mais je doute que cela soit le plus pratique pour toi.

    Dis nous en +

  6. #6
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    ok je reprend depuis le debut pour plus de compréhension.
    mon projet consiste a communiquer avec différents postes distant via winsock. A l'initialisation, j'ai un poste distant de créé, mais je voudrais pouvoir créer une nouvelle form avec un controle winsock dessus pour me permettre d'aller dialoguer avec un autre poste distant en meme temps que le premier.Le problème est que je ne sais pas combien de postes distants j'aurai au final. j'ai essayer en indexant le composant winsock mais a l'arriver des données il m'envoie bouler en me disant que le composant existe déja. donc j'ai abandonner l'indexage pour essayer de faire la fonction que je décris.
    je sais pas si c'est plus clair ou pire.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    Un peu si, disons que fonctionnellement je peux faire des suggestions
    Déjà question évidente, chaque poste que tu contactes par Winsock est sensé provoquer l'apparition de la même form n'est-ce pas ?

    Si c'est oui, alors l'exemple que je te donne plus haut est le bon, il te suffit d'instancier plusieurs fois la même frmTaform !!!

  8. #8
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    en fait au moment ou j'ajoute un poste distant je dois créer une form avec un controle winsock (pour faire simple) mais ce qui apparement n'est pas possible sans créer avant les form. enfin si j'ai compris!

  9. #9
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Le plus simple est de créer une forme "modèle" en mode création et de l'instancier par code je pense non ?
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  10. #10
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par OhMonBato
    Le plus simple est de créer une forme "modèle" en mode création et de l'instancier par code je pense non ?
    créer une form modèle: c'est a dire en créer une que je copirais a chaque ajout de poste distant?

    l'instancier je ne vois pas trop ce que tu ve dire

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    j'ai essayé de copier la form avec les bouts de code de vdl44 et ohmonbato c'est ok ca marche ma form sorvre bien mais le problème c'est qu'elle n'est pas copié. c'est a dire qu'il n'y a rien dedans. il n'existerai par un truc genre "Copy form" qui permettrai d'avoir la meme form?

  12. #12
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    et l'homme découvrit la factorisation !

    bon eh bien tu l'as bien remplie d'une certaine manière la première form ? Tout l'art est de remplir les nièmes suivantes sans faire plus d'effort

  13. #13
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    ou alors pour en revenir a mon essai du début, est ce que quelqu'un saurai si en indexant un composant winsock, on peut recupérer les données d'un controle. car j'ai essayé avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Sub Winsock1(i)_DataArrival(ByVal datalength As Long)
    et en fait, c'est la que j'ai l'erreur, l'objet existe deja.

  14. #14
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Pour ta toute dernière question, il faut que ta sub soit :
    Private Sub Winsock1_DataArrival(ByVal datalength As Long, Index as Integer)
    et non pas ton (i)


    Sinon, si tu veux créer plusieurs feuilles, imaginons un projet avec une feuille appelée Form1 et un bouton de command, voici le code à inclue dans cette feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Option Explicit
     
    Private Sub Command1_Click()
    Dim i As Byte
     
    For i = 1 To 255
      If FrmOpened(i) = False Then
        FrmOpened(i) = True
        Dim Feuille As New FrmModele
        Feuille.Tag = i
        Feuille.Show
        Feuille.Caption = "Feuille N° " & i
        Exit For
      End If
    Next i
    End Sub
    Tu crées ensuite une deuième feuille, que tu appeleras FrmModele avec elle aussi un bouton de commande, voici le code à inclure dans cette feuille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Option Explicit
     
    Private Sub Command1_Click()
    MsgBox "coucou, je suis la form N°" & Me.Tag, vbInformation, "Je m'identifie"
    End Sub
     
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    FrmOpened(Me.Tag) = False
    End Sub
    Il te faut enfin un module, juste pour déclarer une variable public :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Option Explicit
     
    Public FrmOpened(255) As Boolean

    Tu peux essayer et nous dire si ça te convient ?
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  15. #15
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    encore un chose, je ne vois pas trop l'intéret des deux bout de codes que vous m'avez donné. Attendez avant les injures, je m'explique!!

    car, si je crée ma form que ce nomme form3, au lieu d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim toto as New form3
    toto.show
    ca serai pas plus simple d'écrire directement: enfin je dids ca, je dis rien... lol.
    j'espère que vous aurez compris l'objet de cette réflexion.

  16. #16
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    ok ca marche comment ca, mais j'ai toujours le problème de devoir créer toute les forms dont je vais avoir besoin car apparement ce que je veut faire n'est pas possible.

  17. #17
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    [QUOTE=OhMonBato]Pour ta toute dernière question, il faut que ta sub soit :
    Private Sub Winsock1_DataArrival(ByVal datalength As Long, Index as Integer)
    et non pas ton (i)

    si j'ai bien compris, je peut indexer mon controle winsock et donc recuperer les données par exemple de winsock1(2) et winsock1(5)??

    si je peut faire cela je crois que ca va arranger mon problème!!

  18. #18
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    une derniere question: je ne sais pas comment on crée un objet.
    j'ai essayé:
    dim winsock3 as winsock
    -Createobjet (premiere.Controls.Add(winsock3))
    -Createobjet winsock3
    -Create winsock3
    et a chaque fois, j'ai une erreur : sub ou fonction non définie sur createobjet

    et la c'est sur c'est la derniere question: comment on met le tag résolu??

  19. #19
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    c'est ok pour le tag résolu, il faut que j'aprenne a regarder avant de demander.
    au passage dsl pour AlainTech qui repasse derriere moi car je n'est pas mis les balises codes.
    mais je cherche toujours le moyen d'ajouter un controle winsock pour pouvoir mettre le tag résolu.

    Je voudrais dire aussi un grand merci a OhMonBato et a vld44 qui ont eu la patience de me donner des explications. j'espère que je pourrais un jour contribuer comme eux a aider les personnes qui en ont besoin.

  20. #20
    Membre à l'essai
    Inscrit en
    Février 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2007
    Messages : 35
    Points : 24
    Points
    24
    Par défaut
    c'est bon j'ai trouvé, merci de m'avoir aidé.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Fermeture automatique d'une Form
    Par byboleymar dans le forum Langage
    Réponses: 14
    Dernier message: 08/09/2006, 08h57
  2. ajout automatique d'une liste
    Par Galak extra dans le forum Hibernate
    Réponses: 10
    Dernier message: 04/08/2006, 13h25
  3. ajout automatique d'une extension
    Par menuge dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 03/04/2006, 16h25
  4. [VBA-E 97]Ajout automatique d'une colonne selon la date
    Par paflolo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/03/2006, 09h35
  5. TValueListEditor: Ajout automatique d'une ligne vide
    Par Patrick Seuret dans le forum C++Builder
    Réponses: 3
    Dernier message: 24/06/2005, 12h16

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