Le premier site francophone dédié au développement Pocket PC

FindControl ou comment retrouver un contrôle sans la propriété "Name"
Auteur
Redo
Date 21 juin 2005
 
   


Dans le cadre d'un développement de type WinForm sous le .NET Compact Framework, la recherche d'un contrôle dynamiquement à partir de son identifiant (nom) dans la collection des contrôles d'un formulaire reste relativement ardue.

Pour cause, les concepteurs de la version actuelle du .NET Compact Framework ont un peu oublié de nous mettre à disposition le membre bien utile et pourtant bien connu en environnement .NET traditionnel qu'est le " .Name " ! Ceci est effectivement résorbé dans le .NET CF Framework 2.0 !

Afin de pallier à cette problématique, je vous livre une petite fonction de ma conception personnelle permettant de retrouver un contrôle à la volée depuis sa propriété "Name" :

Imports System.Reflection

Public Function FindControl(ByVal myForm As System.Windows.Forms.Control.ControlCollection, _ 
  ByVal name As String) As Control


  For Each myCt As Control In myForm
    
    Dim fi() As FieldInfo
    fi = myCt.Parent.GetType.GetFields(BindingFlags.NonPublic Or _ 
         BindingFlags.Instance Or _ 
         BindingFlags.Public Or BindingFlags.IgnoreCase)
    
    For Each f As FieldInfo In fi
      
      If Replace(f.Name, "_", Nothing) = name Then
               
        If f.GetValue(myCt.Parent).Equals(myCt) Then Return myCt

      End If
               
    Next
    
  Next

End Function 

Il vous restera à "caster" le contrôle dans le type requis ! J'imagine bien qu'elle fera plaisir à plus d'un !

Nous aurions pu étendre cette fonction en récupérant à la volée son type nous permettant de gérer le "casting" à la volée ainsi qu'une gestion de la récursivité de profondeur dans le cadre de contrôles incorporés dans un ensemble de collections de contrôles imbriquées les unes dans les autres !


 

Redo

 
   

Copyright 2001-2005 - Tous droits réservés
Toutes les autres marques et produits présents dans ces pages sont la propriété exclusive de leurs sociétés respectives.