VB.NET - Controler l'existant d'un type d'objet depuis le ControlCollection ? [Résolu]

Signaler
Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
Bonjourno ^^

J'aimerai contrôler l'existence d'un type d'objet dans ma liste de contrôles avant de commencer l'énumération avec Each.

Comment faire ?
(voir commentaire, code ci-dessous)
    Private Sub GroupBoxLabelFont()
        Dim curCTR As ControlCollection = Me.Controls
        If curCTR.Count = 0 Then Exit Sub
        Dim curGB As GroupBox
        Dim curLAB As Object
        'Si dans la liste curCTR il n'existe pas de type
        'groupebox alors Exit Sub ????
        For Each curGB In curCTR
           'Si dans la liste curGB il n'existe pas de type
           'label alors Exit For ????
            For Each curLAB In curGB.Controls
                If curLAB.GetType = GetType(Label) Then
                    curLAB.ForeColor = Color.DarkRed
                End If
            Next
        Next
    End Sub

6 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
38
Petit exemple en utilisant Linq

Private Sub GroupBoxLabelFont()
  Dim curGBs as IEnumerable = From c In Me.Controls
                              Where c.GetType.Tostring = GetType(GroupBox).TString

  For Each curGB As GroupBox in curGBs
    Dim curLBLs as IEnumerable= From c In curGB.Controls
                                Where c.GetType.Tostring = GetType(Label).TString
    For Each curLBL As Label in curLBLs
      curLBL.ForeColor = Color.DarkRed
    Next
  Next
End Sub



[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Bonjour,

Désolé, je ne pense pas que ça soit possible.

Sinon :
If curLAB.GetType = GetType(Label) Then
peut être mieux en :
If TypeOf curLAB Is Label Then
Il me semble.

Mon site
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
13 juin 2021
156
Je ne savais pas cela, merci Casy pour l'information.

Mon site
Messages postés
550
Date d'inscription
jeudi 12 octobre 2006
Statut
Membre
Dernière intervention
6 juin 2015
4
Merci Henry; c'est carrément mieux !!!
(encore mon coté "Alzheimer vb6" à améliorer ^^)

Extra Casy ^^
Le trésor de VB-BABA et des 40 codeurs ^^
C'est surréaliste le Linq !!! Wahhh :)

ça évite le plantage de type si il n'en existe pas.
Si le type est absent, le debugger reprend comme par magie la suite de l'énumération qui semble positionné en mémoire en tâche de fond.

Sa ressemble à une requête SQL sauf qu'elle s'applique au code !!!
Même si je ne sais pas comment il fait pour passer cette exception de type, cette méthode "LINQ" viens de me créer un filet de bave d'émerveillement.

Merci à vous !!!!!
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
38
Linq est un acronyme de "Language Integrated Query"

C'est, comme son nom l'indique, un langage de requetage intégré (d'ou la ressemblance avec SQL) qui a été introduit avec VS2008.
Initialement décliné en 3 catégories, Linq To Object (code que j'ai donné), Linq To Xml (anciennement XLINQ), Linq to SQL (anciennement DLINQ), de nombreux providers, ont, depuis été créés. Une liste, probablement pas exhaustive existe ici

Je suis, moi-même, à peine à la découverte.


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut
On apprend des choses
un lien
http://www.dreamincode.net/forums/topic/62023-using-linq/