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 :

Evenement pour plusieurs controles creed dynamiquement


Sujet :

VB 6 et antérieur

  1. #1
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut Evenement pour plusieurs controles creed dynamiquement
    Bonsoir a tous

    Voila j'ai un petit probleme. J'ai creer un OCX, et je le charge sur un Form n fois avec la methode decrite ici (par moi meme) : VBControlExtender . La pas de probleme.

    Mon controle a un evement (Connected) et c'est la tout le probleme. Lorsque n=1 alors pas de probleme les actions de l'evenement sont bien effectuer. Mais lorsque n>1 alors aucune actions de l'evenement ne ce produit.

    Pour l'evenement voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub ctl_ObjectEvent(Info As EventInfo)
     
        If Info.Name = "Connected" Then
            ' Actions
       End If
     
    End Sub
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  2. #2
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Pourquoi ne fais tu pas simplement un tableau de controles avec tes ocx ?
    Tu déposes le premier ocx sur ta feuille, tu lui donnes l'index 0
    Dans le programme tu fais Load NomOcx(x) pour charger un xieme element dans le tableau
    La gestion des evenements est alors simple puisque l'index du controle est fourni par l'evenement
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  3. #3
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Tout a fait Delbeke. Je pensais aussi a cette solution, mais je me disais quelle etait lourde. Surtout qu'elle implique le chargement prealable du controle, car je voudrais que mon appli soit capable de tourne sur une machine aux config super minime.

    S'il n'y a pas d'autre chemin (car je suis preneur sur tout) je crois que c'est celle la que je vais utiliser avec un petit regret .

    [Edit] J'avais oublie un aspect de la chose. Tous mes controles reagissent de la meme facon a l'evenement, donc le meme code pour tout le monde.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  4. #4
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    bonsoir,
    un exemple de gestion des événements pour les contrôles chargés dynamiquement sans tableau se trouve dans la source du composant com déposé dans les "contributions vb6"
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  5. #5
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Ok je vais y jetter un coup d'oeil. Je l'avais deja telecharger mais n'avais pas pris le temps de l'etudier .
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  6. #6
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Bonjour,

    Tiens 2 exemples de gestion d'événement sur un tableau de contrôles, ici, des textbox :

    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub txtEsp_GotFocus(Index As Integer)
        If fraCompo.Height < fraCompoList.Top + txtEsp(Index).Top Then
            vsbCompoList.Value = Min(vsbCompoList.Value + 600, vsbCompoList.Max)
            vsbCompoList_Change
        ElseIf fraCompoList.Top + txtEsp(Index).Top < 0 Then
            vsbCompoList.Value = Max(vsbCompoList.Value - 600, vsbCompoList.Min)
            vsbCompoList_Change
        End If
    End Sub

    et

    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub txtEsp_KeyPress(Index As Integer, KeyAscii As Integer)
     
        KeyAscii = KeyDecimal(KeyAscii)
     
    End Sub

    Si cela peut t'aider...

    +

    Théo
    Forums VB : lire la notice
    La touche existe pour être utilisée
    Pensez au tag
    Pour ceux n'ayant pas l'aide installée :
    - Aide MSDN pour VB6
    - Aide MSDN pour VBA
    Je ne réponds pas aux questions techniques par MP. Merci d'utiliser le forum fait pour çà.

  7. #7
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Merci Theo pour ta reponse. Je crois que c'est le meme principe que parlais Delbeke et que j'ai finalement utilise faute de mieux .

    Je mets RESOLU, mais suis toujours en attente de proposition par rapport a ma question du premier post.

    @omen je continu a scruter ton code.
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

  8. #8
    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
    Moi déjà il y a un truc que je ne comprends pas, tu déclares en variable de module ton contrôle VBExtender

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim withevents ctl as VBExtender
    Comment peux-tu en charger plusieurs avec ta fonction "CreateControl" sachant que tu affectes toujours la même variable à ton nouveau contrôle ...

    Tu perds la référence aux n-1° contrôles préalablement créés si je ne m'abuse, c'est pourquoi en ne changeant rien il te suffirait de crééer une classe "VBExtenders" qui gère une collection de contrôles, et qui ELLE prenne en charge l'évènement d'ajout de contrôle ou de connection.

    Tu aurais alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dim withevents ctls as VBExtenders
    Je ne sais pas si c'est clair, et je n'ai pas creusé à fond mais il y a peut-être un truc à faire en ce sens.

  9. #9
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Mais bon sang, c'est bien sur!
    vld44 a parfaitement raison. C'est exactement ce que fait vb en interne quand on fait un groupe de controle et que l'on est obligé de faire explicitement avec vb net
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  10. #10
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 296
    Points : 3 549
    Points
    3 549
    Par défaut
    mes contrôles sont ajoutés avec une méthode add définie dans IDynCol
    le défi était de distinguer les différents événements générés par ces contrôles extrinsèques "late-bounded"

    j'ai écris ce truc il y a près de deux ans, mais c'est un projet mort-né qui est resté à l'état bêta. je ne programme plus en vb6 mais je crois me souvenir que je m'étais inspiré de cet article: http://www.vbwm.com/art_1999/whatsnew/dynctrl.asp
    un petit script qui démontre que les événements de deux instances du même contrôle "button" sont parfaitement gérés:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Option Explicit
    'exemple basique de script exploitant le composant XScriptGUI
    'par omen999
     
    Dim oXGUI, oLabel, oTextBox, oButton, oButtonC
     
    Class eHandler
    	Public Sub oButton_Click()
    		oXGUI.CloseForm
    	End Sub
    	Public Sub oButtonC_Click()
    		oButtonC.Enabled = false
    	End Sub
    	Public Sub Form_Load()
    	End Sub
    	Public Sub Form_Unload()
    		MsgBox "Votre mot de passe est " & oTextBox.Text
    	End Sub
    	Public Sub Form_GotFocus()
    		oTextBox.SetFocus
    	End Sub
    End Class
     
     Set oXGUI = CreateObject("XScriptGUI.XGUI")
     With oXGUI
     	Set .EvHandler = New eHandler
    	Set oLabel = .AddControlAuto("Label", "oLabel", "&Mot de Passe: ")
    	Set oTextBox = .AddControlAuto("TextBox", "oTextBox", "",,100)'
    	oTextBox.PasswordChar="*"
    	oTextBox.MaxLength = 8
    	Set oButton = .AddControlAuto("Button", "oButton", "&Ok",,100,,true)
    	Set oButtonC = .AddControlAuto("Button", "oButtonC", "&Annuler",,100)
    End With
     
    Call oXGUI.ShowForm("test XScriptGUI")
    je vais essayer si j'ai un peu de temps de sortir une version simplifiée avec uniquement des contrôles intrinsèques
    nomen omen, nemo non omen - Consultez la FAQ VBScript et les cours et tutoriels VBScript
    le plus terrible lorsqu'une voiture renverse un piéton, c'est que ce sont les freins qui hurlent. (ramón)
    pas de questions techniques par mp

  11. #11
    Membre chevronné
    Avatar de sovo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    1 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 389
    Points : 1 788
    Points
    1 788
    Par défaut
    Citation Envoyé par Vld44
    Tu perds la référence aux n-1° contrôles préalablement créés
    c'est vrai que je n'avais pas vu les choses sous cet angle. Je vais me pencher une fois de plus sur la question. Merci
    "Toute question a une reponse. Et chaque reponse est une nouvelle question." Albert EINSTEIN

    En cas de Question resolu, n'oubliez pas

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

Discussions similaires

  1. les evenements pour les controls generés dynamiquement
    Par vb_boycotter dans le forum ASP.NET
    Réponses: 0
    Dernier message: 31/05/2009, 23h58
  2. Un control enfant pour plusieurs Controls Parents
    Par Cedric33 dans le forum Windows Forms
    Réponses: 4
    Dernier message: 29/10/2008, 09h14
  3. Validator unique pour plusieurs controles
    Par fmajet dans le forum ASP.NET
    Réponses: 3
    Dernier message: 18/08/2008, 12h55
  4. Méthode pour plusieurs controllers
    Par pjmorce dans le forum Ruby on Rails
    Réponses: 4
    Dernier message: 29/02/2008, 10h04
  5. Réponses: 6
    Dernier message: 18/04/2005, 21h12

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