Gérer les fenêtres sous vb6 sans recours à forms.count

Soyez le premier à donner votre avis sur cette source.

Vue 5 695 fois - Téléchargée 378 fois

Description

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

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
22 août 2018
54 -
ce sera pas plus simple de faire une collection compatible avec Forms, le jour ou tu joueras en .NET ?
parce que là, ca fait double emploi...
PCPT
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
23 -
salut,

tel quel je ne vois pas non plus l'intérêt.
un collection d'UNE collection?...

d'ailleurs c'est un peu le même principe pour ta précédente source.

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.