Récupérer les informations de intellisense (avec la reflection ???)
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
23 sept. 2009 à 15:36
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 2019
-
28 sept. 2009 à 15:40
Bonjour,
En ce moment, je me développe des classes "génériques" (entre autres une classe "journal" qui me serviras d'exemple) pour mes futures projets (je suis un peut à vide là tout de suite donc je prend de l'avance ). Ici pas de problèmes.
Maintenant je veut me faire un UserControl de configuration intelligent (enfin autant qu'il puisse l'être ). Et c'est la que sa coince
Dans cette classe (journal) j'ai différentes énumérations qui me permettent de la configurer ("EnBy_MethodeHistoJournal" qui énumère toutes les possibilités d'historisation de mes journaux me serviras d'exemple : "Tous les journaux dans le même fichier", "Un fichier journal par date", ...). Pour chaque élément de cette énumération je voudrais crée (dynamiquement bien sure) un "RadioButton" en mettant dans sa propriété "Text" la description de cette élément présente dans l'intellisense et dans le tooltiptext la remarque (si elle existe) tj présente dans l'intellisense (et la ma class aurais la classe ).
Mon objectif étant que si j'ajoute par la suite un nouvelle élément dans mon énumération (en renseignant intellisense bien évidemment) mon UserControl se mette à jour automatiquement. Je pense que pour faire sa j'ai besoin de "System.Reflection" mais je ne m'en suis servie qu'à de très rare occasion (une fois fin 2007 à vrais dire) et je n'y arrive pas .
Je sait déjà crée dynamiquement mes RadioButton (sa c'est facile, il suffi d'en crée un dans l'interface puis d'aller dans la définition de la fonction "InitializeComponent" présente dans le "New" du usercontrol, ou dans un formulaire sa marche aussi, pour voir comment faire ) mais récupérer la liste des éléments d'une énumération et leurs descriptions sa je ne sait pas faire .
Mon énumération exemple pour bien comprendre mon objectif :
''' <summary>
''' Méthode d'historisation du journal <- Le texte qui sera présent dans le GroupBox
''' </summary>
Public Enum EnBy_MethodeHistoJournal As Byte
''' <summary>
''' Le journal est réinitialisé (vidé) à chaque exécution <- Le texte du 1ér RadioButton
''' </summary>
UneExecution = 1
''' <summary>
''' Toutes les exécutions sont sauvegarder dans le même journal <- Le texte du 2ème RadioButton
''' </summary>
''' <remarks>
''' ATTENTION le fichier journal peut devenir TRÈS gros <- Le tooltiptext du 2ème RadioButton
''' </remarks>
TouteExecution = 2
''' <summary>
''' Chaque journal contient la date du jour de sa création <- Le texte du 3ème RadioButton
''' </summary>
''' <remarks>
''' La date de création afin d'éviter d’avoir plusieurs journaux pour la même exécution en cas de traitement de nuit <- Le tooltiptext du 3ème RadioButton
''' </remarks>
UnFichierParDate = 3
End Enum
Merci d'avance (si qq chose ne vous parais pas claire dans ma question n'hésitez surtout pas à demander)
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
A voir également:
Récupérer les informations de intellisense (avec la reflection ???)
cs_Z1z1
Messages postés3Date d'inscriptionvendredi 14 mars 2003StatutMembreDernière intervention13 septembre 2014 25 sept. 2009 à 14:36
Voici un exemple EN VB 6.0 ... qui retourne le nom (dans une string) d'un élément d'une itération
L'astuce est d'utiliser la "TypeLib Library".... je ne sais pas si c'est exploitable en Dot.Net.
NB Cet exemple à la base n'est pas de moi, mais de Microsoft
Private Sub Form_Load()
'Exemple....
Debug.Print GetEnumName(vbMaximized, "FormWindowStateConstants", "C:\WINDOWS\system32\msvbvm60.dll\3")
End Sub
Public Function GetEnumName(EnumValue As Long, EnumName As String, TypeLibFile As String) As String
On Error GoTo Error_GetEnumName
Dim oTLIApp As Object 'TLI.TLIApplication
Dim oTLI As Object 'TypeLibInfo
Dim oTL As Object 'TypeInfo
Dim oTLMember As Object 'MemberInfo
Const TKIND_ENUM = 0
Set oTLIApp = CreateObject("TLI.TLIApplication")
Set oTLI = oTLIApp.TypeLibInfoFromFile(TypeLibFile)
For Each oTL In oTLI.TypeInfos
If oTL.TypeKind TKIND_ENUM And oTL.Name EnumName Then
' Now we have to search each member to find the correct value.
For Each oTLMember In oTL.Members
If oTLMember.Value = EnumValue Then
GetEnumName = oTLMember.Name
Exit Function
End If
Next oTLMember
End If
Next oTL
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 25 sept. 2009 à 16:42
Ok merci de t'intéresser à mon problème Z1z1 .
On pouvais déjà faire ce genre de chose en VB6 (avec de la chance Microsoft auras ajouté les infos de intellisense, par contre j'ai l'impression que sa récup les nom des "variable" de l'enum et c'est pas tout à fait mon objectif mais sa m'en rapproche un peut c'est déjà sa)
(Je doit finir un truc pour ce soir mais je regarde sa dé lundi), je poste ici la traduction en Dot.Net dé que c'est fait
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo
Polack77
Messages postés1098Date d'inscriptionmercredi 22 mars 2006StatutMembreDernière intervention22 octobre 20191 28 sept. 2009 à 15:40
Un projet "surprise" viens de me tombé dessus, et paf .
Je reviendrais sur celui-ci dé que je pourrais.
DZL
Amicalement
1000 recherches sur Google = 1Km de voiture en CO² (réfuté par Google )
1000 recherches sur Forestle = 100 m² de forêt tropicale sauvé .
Surfez écolo