IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Collection de controle type textbox


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut Collection de controle type textbox
    Bonjour,

    Pour je ne sais quel raison ceci ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
       Sub collections() Handles MyClass.Load
     
            Dim InputGroupBox As New Collection
            With InputGroupBox
                .Add(Mass_box.Controls)
                .Add(Geometry_box.Controls)
                .Add(Suspension_box.Controls)
                .Add(Wheels_box.Controls)
                .Add(Steering_box.Controls)
            End With
     
            Dim InputTextbox As New Collection
     
            For Each textbox As TextBox In InputGroupBox
                InputTextbox.Add(textbox)
                MessageBox.Show(textbox.Name)
            Next
        End Sub
    Si l'on fait .controls à un groupbox on a bien tous les controls du groupbox non?

    Si et seulement si je met un break point, il m'informe que la collection crée est de type Microsoft.VisualBasic.Collection et qu'elle devrait plutot être de type System.Windows.Form.Control.ControlCollection...

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    il est peut être préférable de travailler avec des listes.
    Et si la première liste contient des controls de types différents, et éviter les problèmes de Cast, la recherche peut se faire, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            Dim InputTextbox As New List(Of TextBox)
     
            For Each textbox As TextBox In InputGroupBox.OfType(Of TextBox)()

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut
    J'ai essayer des chose mais sans succes.

    Merci pour ton aide.

    Je devrais avoir la réponse cette après midi, je vous tiens au courant.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    voilà un exemple :
    je récupère, dans une liste tous les contrôles d'un conteneur (ici le formulaire lui même):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            Dim InputGroupBox As New List(Of Control)
            For Each crl As Control In Me.Controls
                InputGroupBox.Add(crl)
            Next
    Et si je veux une liste uniquement des contrôles de type TextBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Dim InputTextbox As New List(Of TextBox)
            For Each crlTxt As TextBox In InputGroupBox.OfType(Of TextBox)()
                InputTextbox.Add(crlTxt)
                MessageBox.Show(crlTxt.Name)
            Next
    Le filtre OfType est pris en charge à partir de .NET Framework 3.5, pour une version 2, il faut tester le type du contrôle, sauf erreur, genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            For Each ctl In MyBase.Controls
                If ctl Is TryCast(ctl, TextBox)

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 335
    Par défaut
    Bonsoir,

    Merci pour ta réponse Chris, j'ai essayé avec une liste comme tu l'as fais mais sans succès. Mais dans mon cas je ne veux faire une collection qu'avec les contrôles contenu dans la tab chassis



    Comme on peut le voir, je voudrais une collection des 4 groupbox de la tab chassis, puis des tous les tab de droites.

    Esuite je filtre ces containers et ne garde que les textbox et radiobuttons.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     Dim ContainerOfInputControls As New Collection
        Dim InputControlCollection As New Collection
     
        Private Sub SetContainerOfInputControlCollection() Handles Button1.Click
     
            With ContainerOfInputControls
                .Add(Mass_box.Controls)
                .Add(Geometry_box.Controls)
                .Add(Suspension_box.Controls)
                .Add(Steering_box.Controls)
                .Add(MassResult_tab.Controls)
                .Add(FrequencyResult_tab.Controls)
                .Add(StiffnessResult_tab.Controls)
                .Add(MagicNumber_tab.Controls)
            End With
     
            Call SetCollectionOfInputControl()
        End Sub
     
        Private Sub SetCollectionOfInputControl()
     
            For Each InputControl As Control In ContainerOfInputControls
                If TypeOf InputControl Is TextBox Then
                    MessageBox.Show(InputControl.Name)
                    InputControlCollection.Add(InputControl)
                End If
                If TypeOf InputControl Is RadioButton Then
                    InputControlCollection.Add(InputControl)
                End If
            Next
     
        End Sub
     
        Private Sub ClearBinding()
            For Each InputControl As Control In InputControlCollection
                InputControl.DataBindings.Clear()
            Next
            Call DisplayChassisTabResults()
        End Sub

    L'erreur se produit à la ligne 22:

    Impossible d'effectuer un cast d'un objet de type 'ControlCollection' en type 'System.Windows.Forms.Control'.

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonsoir,
    pourquoi tiens tu tant à Collection?
    Ça ne fonctionne pas (dixit le message d'erreur), ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     Dim ContainerOfInputControls As New Collection
        Dim InputControlCollection As New Collection
     
        Private Sub SetContainerOfInputControlCollection() Handles Button1.Click
     
            With ContainerOfInputControls
                .Add(Mass_box.Controls)
                .Add(Geometry_box.Controls)
                .Add(Suspension_box.Controls)
                .Add(Steering_box.Controls)
                .Add(MassResult_tab.Controls)
                .Add(FrequencyResult_tab.Controls)
                .Add(StiffnessResult_tab.Controls)
                .Add(MagicNumber_tab.Controls)
            End With
     
            Call SetCollectionOfInputControl()
        End Sub
    ContainerOfInputControls est de type Collection appartenant à l'Assembly : bibliothèque Visual Basic Runtime (dans Microsoft.VisualBasic.dll)
    Il est alimenté par des Mass_box.Controls par exemple, qui sont des collections de controls, appartenant à l'Assembly : System.Windows.Forms (dans System.Windows.Forms.dll)
    Il y a conflit, comme le dit MSDN :

    Il existe plusieurs types de collections qui diffèrent les unes des autres de plusieurs façons :
    Visual Basic fournit également une classe Collection, qui vous permet de définir et de créer vos propres collections.
    À l'instar de la collection Controls d'un formulaire, la classe Collection offre également une fonctionnalité intégrée qui vous permet de parcourir les éléments à l'aide de For Each...Next et de récupérer des éléments en fonction de leur index.
    Pour plus d'informations, consultez Collection, objet (Visual Basic).
    Toutefois, les deux types de collection n'interagissent pas entre eux. Par exemple, le code suivant génère une erreur de compilation :

    Dim localControls As Collection
    localControls = Me.Controls()


    Les collections sont incompatibles car la collection Controls est une collection du .NET Framework, tandis que la variable localControls est une Collection de Visual Basic.
    Les deux types de collections sont implémentés à partir de classes différentes. Leurs méthodes sont semblables mais pas identiques, et leurs modèles d'indexation sont différents.
    Mon avis est de passer à System.Collections.Generic (Assembly : mscorlib (dans mscorlib.dll)).
    A tester :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
        Dim ContainerOfInputControls As New List(Of Control)
        Dim InputControlCollection As New List(Of Control)
     
        Private Sub SetContainerOfInputControlCollection() Handles Button1.Click
     
            With ContainerOfInputControls
                .Add(Mass_box)
                .Add(Geometry_box)
                .Add(Suspension_box)
                .Add(MassResult_tab)
                .Add(FrequencyResult_tab)
                ' etc...
                ' Les contrôles de type conteneurs, embarquent avec eux leurs contrôles enfants.
            End With
            SetCollectionOfInputControl()
        End Sub
     
        Private Sub SetCollectionOfInputControl()
     
            For Each InputControl As Control In ContainerOfInputControls
                For Each ctl As Control In InputControl.Controls
                    If TypeOf ctl Is TextBox Then
                        MessageBox.Show(ctl.Name)
                        InputControlCollection.Add(ctl)
                    End If
                    If TypeOf ctl Is RadioButton Then
                        InputControlCollection.Add(ctl)
                    End If
                Next
            Next
     
        End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 18
    Dernier message: 29/01/2007, 16h13
  2. [VB .NET] Type TextBox
    Par Skunk007 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 07/04/2006, 21h25
  3. [VBA-E] collection des controles formulaire
    Par borisa dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/03/2006, 18h22
  4. [C#] Problème de Collection de controles...
    Par kunfuka dans le forum ASP.NET
    Réponses: 10
    Dernier message: 08/12/2005, 16h52
  5. collection de controles??
    Par fab44 dans le forum IHM
    Réponses: 7
    Dernier message: 29/12/2004, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo