cs_cotmar
Messages postés71Date d'inscriptionvendredi 13 septembre 2002StatutMembreDernière intervention 9 mars 2009
-
3 mars 2006 à 10:21
cs_cotmar
Messages postés71Date d'inscriptionvendredi 13 septembre 2002StatutMembreDernière intervention 9 mars 2009
-
3 mars 2006 à 12:19
Bonjour,
Voilà avant de vous poser ma question, je vous situe le contexte. Il s'agit tout d'abord de VB6.
J'ai une combo box qui si on est à la première ligne sélectionnée de la combo correspond en face soit à 3 options buttons, à 2 options button quand la deuxième ligne de la combo est sélectionnée...
Je charge donc mes options buttons dynamiquement en fonction de la ligne de la combo qui est sélectionnée et du coups j'ai eussi besoin de décharger dynamiquement avant toute chose les option buttons avant d'en créer d'autres.
Mon problème est le suivant : VB refuse apparemment de laisser passer un ordre UNLOAD avec un évènement click de l'option button.
J'espère avoir été assez clair dans ma question. J'espère aussi être dans la bonne partie du forum. Dans le cas contraire, je vous prie de m'excuser.
cs_cotmar
Messages postés71Date d'inscriptionvendredi 13 septembre 2002StatutMembreDernière intervention 9 mars 2009 3 mars 2006 à 10:30
Voici mon code : (Le préfixe "Cbo" désigne la combo box et "Opt" les option button.
J'ai volontairement enlevé ce qui ne servait pas directement à l'esplication.
Private Sub CboReference_Click()
'========================================================================================================================
On Error GoTo Errhandle
Dim IntCpt As Integer
For IntCpt = OptReference1.UBound To OptReference1.LBound + 1 Step -1
Unload OptReference1(IntCpt)
Next IntCpt
Select Case CboReference.ListIndex
Case 0
OptReference1(0).Caption = "option 1"
OptReference1(0).Visible = True
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 3 mars 2006 à 10:33
Salut,
N'essaierais tu pas de decharger un controle inserer manuellement dans la feuille (si oui c est impossible)
Les seuls objets qui peuvent etre decharge dynamiquement sont sont charger dynamiquement.
"UNLOAD avec un évènement click de l'option button." -> Si la condition de chargement est dechargement de tes option button est la ligne selectionne dans le combo, ne penses tu pas qu il serait plus judicieux de faire les LOAD et UNLOAD dans l'evenement click du Combo.
Ou est ce que ton programme pete: Un bout de code serait le bienvenue.
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
cs_eldim
Messages postés956Date d'inscriptionlundi 30 mai 2005StatutMembreDernière intervention21 août 20141 3 mars 2006 à 10:40
Bonjour,
Question con : pourquoi ne pas mettre tous les controls et ne rendre visble que ceux qui t'intéressent au moment voulu
tu met tes controls dans des frames séparés et le tour est joué...
-- Pourquoi faire simple quand on peut faire compliquer --
cs_cotmar
Messages postés71Date d'inscriptionvendredi 13 septembre 2002StatutMembreDernière intervention 9 mars 2009 3 mars 2006 à 10:49
Bonjour,
Ce que tu dis est vrai, mais comme j'ai butté sur cette difficulté et que je suis quelqu'un d'un peut têtu, je me suis dit qu'il y avait sûrement une raison à ça.
En bref j'aimerais beaucoups me coucher moins bête ce soir que je ne l'étais ce matin au réveil.
Par ailleur ce faisant ce bout de code que j'ai commencé à faire devrait ainsi être être plus évolutiof une fois terminé. Ca si pour le momment j'ai seulement 3 option button au maximum, pourquoi demain n'y en aurait il pas 4 ou 5 ou 6...
Merci quand même pour vos réponses. J'espère que vous pourrez m'aider.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 3 mars 2006 à 10:49
Re,
Interressant comme probleme.
Ce code fonctionne et pourtant il est guere different
Private Sub Command1_Click()
Dim i As Integer
For i = 1 To 3
Call Load(OptReference1(i))
OptReference1(i).Left = OptReference1(0).Left
OptReference1(i).Top = OptReference1(i - 1).Top + OptReference1(i - 1).Height
OptReference1(i).Visible = True
Next
End Sub
Private Sub Command2_Click()
Dim i As Integer
For i = 1 To 3
OptReference1(i).Visible = False
Call Unload(OptReference1(i))
Next
End Sub
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
cs_cotmar
Messages postés71Date d'inscriptionvendredi 13 septembre 2002StatutMembreDernière intervention 9 mars 2009 3 mars 2006 à 10:56
Merci à tous les deux.
Effectivement j'avais essayé de faire le UNLOAD sur un command button et dans ce cas ça marche. La syntaxe ou autre problème du même acabi ne serait donc pas en cause (?).
J'avoue que je ne sais pas trops comemnt solutionner ce problème.
Cotmar
addamsmercredi
Messages postés121Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention27 juillet 2006 3 mars 2006 à 11:05
Il y a effectivement un problème lorsque c'est dans l'évènement click d'un ComboBox, j'ai déjà eu le tour.
Pour remédier à ce problème, on peut utiliser un timer d'une petite durée (genre 1 ms). Tu mets le code voulu dans le timer sans oublier de le désactiver tout de suite. Et dans la procédure CboReference_Click, tu actives le timer.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 3 mars 2006 à 11:06
Re,
Ce qui est encore plus bizarre c est que c est juste dans le code du click du Combo que ca ne marche pas.
Pour teste j ai mis un timer et dans le code du timer j ai place exactement le meme code que dans le combo Click.
juste rajouter: Private Decharge as Boolean (comme variable du Form)
Private Sub Timer1_Timer()
If Decharge Then
'Le meme Code
Decharge = False
End if
End sub
Et dans le code du cbo...Click:
juste mettre: If Not Decharge then Decharge = True
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
cs_cotmar
Messages postés71Date d'inscriptionvendredi 13 septembre 2002StatutMembreDernière intervention 9 mars 2009 3 mars 2006 à 11:14
Je vais donc essayer cette solution. Merci à tous.
Je vous tiens au courant. Il me semble que j'avais essayé le Timer, mais sans jouer sur la durée en fait.
addamsmercredi
Messages postés121Date d'inscriptiondimanche 3 octobre 2004StatutMembreDernière intervention27 juillet 2006 3 mars 2006 à 12:04
En utilisant la ligne "Call Timer1_Timer", c'est normal que ça ne fonctionne pas puisque Call n'active pas le timer, ça sert seulement à appeler une procédure. En faisant cela, ça reste bloqué à cette instruction jusqu'à ce que le code soit fini et ça reste donc bloqué dans la procédure CboReference_Click pendant l'exécution du code.
Alors que le but est de sortir de la procédure CboReference_Click et d'exécuter le code seulement après.
Pour activer un timer, c'est Timer1.Enabled = true.
Et rien ne sert de faire fonctionner le timer en permanence donc en dehors, il faut toujours le laisser désactiver (timer1.Enabled = false).
cs_cotmar
Messages postés71Date d'inscriptionvendredi 13 septembre 2002StatutMembreDernière intervention 9 mars 2009 3 mars 2006 à 12:19
Oups j'avais pas vu la réponse déposée entre temps, qui me donne ce complément d'explication sur le timer.
Donc encore une fois un grand merci à tous.
A bientôt amigos.
Marco alias...