Code Advisor me déconseillant l'utilisation de Forms.count pour gérer la fermeture des fenêtres avant de quitter mon application, j'ai créer une collection de fenêtres.
Certaines fenêtres se ferment automatiquement, d'autres doivent être fermées manuellement.
Le programme permet de lister les fenêtres ouvertes (fctListeFenetresInCollection) et de mettre au premier plan la fenêtre sélectionnée (AfficherFenetreSelectionnee).
Source / Exemple :
L'ensemble comporte une classe pour enregistrer une collection de "form" et un module pour manipuler la collection.
CappFenetres.cls
Option Explicit
Private m_appFenetres As Collection
Public Function Add(AFenetre As Form, Optional AValue As String) As Form
'définir les propriétés passées à la méthode
If Len(AValue) = 0 Then
m_appFenetres.Add AFenetre
Else
m_appFenetres.Add AFenetre, AValue
End If
'renvoyer l'objet créé
Set Add = AFenetre
End Function
Public Property Get ItemInt(AValue As Integer) As Form 'CAppFenetre
'Utilisé pour référencer un élément dans la collection
'AValue contient l'index dans la collection
Set ItemInt = m_appFenetres.Item(AValue)
End Property
Public Property Get ItemStr(AValue As String) As Form 'CAppFenetre
'Utilisé pour référencer un élément dans la collection
'AValue contient la clé dans la collection
Set ItemStr = m_appFenetres.Item(AValue)
End Property
Public Property Get Count() As Long
'utilisée pour lire le nombre d'éléments dans la
Count = m_appFenetres.Count
End Property
Public Sub Remove(AValue As String)
'utilisée lors de la suppression d'un élément de la collection
'AValue contient la clé
m_appFenetres.Remove AValue
End Sub
Public Property Get NewEnum() As IUnknown
'Cette propriété vous permet d'énumérer
'cette collection avec la syntaxe For...Each
Set NewEnum = m_appFenetres.[_NewEnum]
End Property
Private Sub Class_Initialize()
'Crée la collection lorsque cette classe est créée
Set m_appFenetres = New Collection
End Sub
Private Sub Class_Terminate()
'Détruit la collection lorsque cette classe est détruite
Set m_appFenetres = Nothing
End Sub
Chaque fenêtre s'enregistre dans la collection par sa méthode load et se retire de la collection par sa méthode unload :
Option Explicit
Private Sub Form_Load()
'Déclarer la fenetre dans la collection "fenetres"
prcAddFenetreInCollection Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
'Oter la fenetre de la collection "Fenetre"
g_colFenetres.Remove Me.hWnd
End Sub
Conclusion :
ça fait la même chose que la collection Forms de VB mais il faut le gérer explicitement. Cela permettra à mes programmes d'être plus facile à convertir à l'avenir en VB.NET
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.