VB m'affiche une erreur Automation dans mon code.
J'ai pu le reproduire dans cette maquette de UserControl :
Public Property Let BackColor(Color As Long)
UserControl.BackColor = Color
End Property
Private Sub UserControl_InitProperties()
Dim Obj As Object
Randomize
Dim Color As Long: Color = Val(Rnd * vbWhite)
For Each Obj In UserControl.ParentControls
If TypeOf Obj Is UserControl1 Then
Obj.BackColor = Color
End If
Next Obj
End Sub
A chaque ajout d'un UserControl1 dans une Form, tous les UserControl1 présent changent de couleur. Simpliste, mais ca met en oeuvre ParentControls
au bout de 30 controles, j'ai l'erreur n°80010108
"L'objet invoqué s'est déconnecté de ses clients. "
j'ai demandé à gogole, mais rien de bien concluant...
je me tourne donc vers vous...
Le code suivant marche sans probleme voici un lien vers ton bug je pense qu'il est deconseiller d'utiliser ParentControls surtout que Obj.Parent est disponible sur tout les Control Container donc a premiere vue on garde une bonne compatibilité
Option Explicit
Public Property Let BackColor(ByVal Color As Long)
UserControl.BackColor = Color
End Property
Private Sub UserControl_InitProperties()
Dim Obj As Object
Randomize
Dim Color As Long: Color = Val(Rnd * vbWhite)
'On Error Resume Next 'Facultatif
For Each Obj In UserControl.Parent.Controls
If TypeOf Obj Is UserControl1 Then
Obj.BackColor = Color
End If
Next Obj
End Sub
Juste pour ajouter mon eau au moulin je viens d'avoir exactement cette erreur dans un de mes control UpDown qui incrémentait/décrémentait un nombre dans une textbox.
L'erreur était provoquée par le "plantage" du composant UpDown car à un moment donné, pendant l'exécution, la valeur de la textbox était hors bornes min/max du control UpDown (je précise aussi que j'ai lié le UpDown à la textbox via les propriétés BuddyControl et BuddyProperty)
J'ai résolu le problème en initialisant d'abord min/max à leurs valeurs la plus petite/grande avant de toucher a la valeur contenue dans la textbox.
C'est impressionnant comme erreur mais le bug derrière est souvent anodin à mon avis.