Comment référencer une variable par un objet deja existent en utilisant "For ...

Résolu
Signaler
Messages postés
10
Date d'inscription
samedi 19 août 2006
Statut
Membre
Dernière intervention
20 octobre 2006
-
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
-
Salut,

Voilà, je suis un newbie en Visual Basic 2005. J'ai essayé de déclarer
un objet (ou une variable chè pas quoi) référencié en tant qu'un objet
déja existent mais en utilisant la méthode de "For ... Next", c. à d.
que j'ai plusieurs (20) objets "ComboBox" nommés :"ComboBox1",
"ComboBox2", "ComboBox3", ..., "ComboBox20". Et je voudrais référencier
ma variable "Comb" par Chacun de ces "ComboBox" à chaque étape de "For".

Exemples:

Pour i=1 ==> comb=ComboBox1

Pour i12> comb=ComboBox12


Le même cas pour ma variable textbox avec les objet "TextBox", alors
j'ai esséyé avec plusiers tentatives mais j'ai toujours eu d'erreurs
ayant la signification: "Le type String ne peut etre converis en objet
ComboBox ..." ou "Vous ne pouvez pas utiliser une méthode d'une classe
sans l'avoir déclaré auparavant...".


Voici un extrait de mon code:


 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim i As Integer = 1

        For i = 1 To 20

            Dim textboxname As String = "TextBox" & CStr(i)

            Dim textbox As System.Windows.Forms.TextBox

            textbox.Name = textboxname

            Dim combname As String = "ComboBox" & CStr(i)

            Dim comb As System.Windows.Forms.ComboBox

            comb.Name = combname

            validatenum(textbox, comb)

            If cancel = True Then

                Exit Sub

            End If

        Next

 End Sub


 Private Sub validatenum(ByVal textbox As Object, ByVal comb As Object)

        Dim num As String = Replace(textbox.name.ToString, "TextBox", "")

        Dim infotextback As String = infotext.Text

        If textbox.text.length <> 6 And comb.Text <> "" Then

            cancel = True

            textbox.select(0, textbox.Text.Length)

            infotext.Text = "Erreur de saisie!" & Chr(13) &
Chr(10) & Chr(13) & Chr(10) & "Veuillez coriger le numéro "
& num & "."


        Else

            infotext.Text = infotextback

            cancel = False


        End If

    End Sub


Et voici un autre essaie:


 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim i As Integer = 1

        For i = 1 To 20

            Dim textbox As System.Windows.Forms.TextBox = CType(




"TextBox" & CStr(i), object)







            Dim comb As System.Windows.Forms.ComboBox =





CType(





"ComboBox" & CStr(i), object)







            validatenum(textbox, comb)

            If cancel = True Then

                Exit Sub

            End If

        Next

 End Sub


 Private Sub validatenum(ByVal textbox As Object, ByVal comb As Object)

        Dim num As String = Replace(textbox.name.ToString, "TextBox", "")

        Dim infotextback As String = infotext.Text

        If textbox.text.length <> 6 And comb.Text <> "" Then

            cancel = True

            textbox.select(0, textbox.Text.Length)

            infotext.Text = "Erreur de saisie!" & Chr(13) &
Chr(10) & Chr(13) & Chr(10) & "Veuillez coriger le numéro "
& num & "."


        Else

            infotext.Text = infotextback

            cancel = False


        End If

    End Sub



Je vous serai très reconnaissant si vous tentiez de m'aider là. Et merci d'avance.

12 réponses

Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Oups désolé pour ce post, "J'aime bien les frites" est ma signature par défaut que je n'ai pas retiré...

Je voulais dire (puisqu'apparemment c pas passé) que pour le For Each j'avais oublié un truc, c'est :
For Each CmbBox in Panel1.Controls

Voila

Julien (J'espère que j'ai pas posté 2 fois ou qque chose... dsl si c le cas :p)
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
Salut !
Je te conseilles de t'y prendre légèrement autrement :
Tu mets tout tes combobox et tes textbox dans des conteurs comme par exemple le GroupBox ou Panel (regarde dans l'onglet Container de ta ToolBox). (tu peux les laisser tels quels dans ton form si se sont les seuls combobox/textbox que tu as)
Ensuite tu fais utilise un For...Each :

Dim CmbBox as ComboBox
For Each CmbBox In Panel1 '(Ou autre chose selon ton container)
Msgbox(CmbBox.Name)
... Traite ta combobox ici
Next
Messages postés
3172
Date d'inscription
dimanche 15 février 2004
Statut
Membre
Dernière intervention
9 avril 2017
35
Oui, il faut d'y prendre autrement.



Déjà, pourquoi tu n'indique pas plutot un index a ta fonction validatenum et récupéré les controls dans celle ci ?

Pour récupéré un control par son nom:





Dim
Combo
As
System.Windows.Forms.ComboBox =
CType
(
MyBase
.Controls(
"ComboBox"
& i.ToString()), System.Windows.Forms.ComboBox)



Kenji



Il était une fois, un pauvre petit règlement que personne ne lisait. Il est tout sympa mais il est triste, aidez-le, lisez-le, ca lui ferait tellement plaisir ainsi qu'a nous. Merci.
Ca sent le sondage sur ce lien
Messages postés
10
Date d'inscription
samedi 19 août 2006
Statut
Membre
Dernière intervention
20 octobre 2006
1
Merci à vous tous.
Mais le problème est toujours persistant.
[auteurdetail.aspx?ID=404581 Julien237]  :\> Le contrôle Panel ou la classe Panel n'est pas reconnue en tant que collection pour que For Each y entre et selectionne. Donc "For Each textbox In Panel2" n'a pas pu etre resolue.
En plus je ne sais pas comment y integrer la variable comb dans la même ligne, encore un autre prob c'est que j'ai les controles TextBox et ComboBox dispersés sur Panel2 et Panel3. là c'est encore pire!!

[auteurdetail.aspx?ID=231472 Charles Racaud] :\> Votre solution me semblait plus convenable mais malheureusement je ne sais pas pourquoi ça réagit comme si on a rien affecter aux variables textbox et comb, lorsque j'execute le code en utilisant l'une des propriétés (ou méthodes) de textbox (ou de comb) tel que "textbox.Name" j'obtient l'erreur m'indiquant que textbox (ou comb) ne font référence à aucun controle déja existant et que je devais peut etre créer une nouvelle instance pour chacune d'elle.
ça me parrait vraiment bizzare pourqoui l'expression:
Dim textbox As System.Windows.Forms.TextBox = MyBase.Controls("TextBox" & i.ToString()) n'a eu aucun effet.
Pourtant l'expression :
MsgBox("TextBox" & i.ToString())
Me donne "TextBox1"

Y a t'il une autre astuce?
Et merci pour votre aide.
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
D'après ce que j'ai pu voir, tu déclares ta variable textbox de type Textbox, mais tu ne crée jamais d'objet.

  Dim textbox As System.Windows.Forms.TextBox
        textbox = New System.Windows.Forms.TextBox
        textbox.Name = "coco"
        textbox.Location = New Point(10, 10)

        Me.Controls.Add(textbox)
Messages postés
1471
Date d'inscription
mardi 5 février 2002
Statut
Membre
Dernière intervention
20 octobre 2014
12
j'ai pas compris ce que tu voulais faire.
Mais si tu veux juste parcourir tes textbox :


Dim
t

As
TextBox


For
I

As



Integer
= 1

To
20t =


Me
.Controls(

"TextBox"
& I)t.Text =


"TOTO"
& I


Next




BasicInstinct
Messages postés
403
Date d'inscription
mercredi 19 avril 2006
Statut
Membre
Dernière intervention
7 août 2020
1
Pour ton histoire d'index je n'ai pas trouvé mieux que d'utiliser une collection :

Public Class Form1

    Private toto As New Collection

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim NewTextbox As System.Windows.Forms.TextBox
        Dim i As Integer

        For i = 0 To 10

            NewTextbox = New System.Windows.Forms.TextBox
            NewTextbox.Name = "coco" & CStr(i)
            NewTextbox.Location = New Point(10, 10)
            Me.Controls.Add(NewTextbox)
            toto.Add(NewTextbox)

        Next

        For Each NewTextBox In toto
            'blabla
        Next

    End Sub
End Class
Messages postés
10
Date d'inscription
samedi 19 août 2006
Statut
Membre
Dernière intervention
20 octobre 2006
1
Mais siiiiii. J'en ai 20.
J'ai 20 contrôles TextBox et 20 contrôles ComboBox.
Messages postés
10
Date d'inscription
samedi 19 août 2006
Statut
Membre
Dernière intervention
20 octobre 2006
1
Dois-je laisser tomber tou. Je ne  peux me debarasser de cette erreur. voici mon code:


Dim



txtbox As TextBoxDim comb As ComboBox

For i AsInteger = 1 To 20

txtbox = Me.Controls("TextBox" & i)

comb = Me.Controls("ComboBox" & i)

MsgBox("TextBox" & i)  'ça donne TextBox1

MsgBox(txtbox.Name) 'ça donne l'erreur :La référence d'objet n'est pas définie à une instance d'un objet.

Et je vous jure que j'ai 20 TextBox dans mon Form:  TextBox1, TextBox2,..., TextBox20.
Messages postés
10
Date d'inscription
samedi 19 août 2006
Statut
Membre
Dernière intervention
20 octobre 2006
1
Et si je mets:



Dim



txtbox

As
TextBox

txtbox = TextBox1

MsgBox(txtbox.Name)    'ça donne Textbox1
Messages postés
10
Date d'inscription
samedi 19 août 2006
Statut
Membre
Dernière intervention
20 octobre 2006
1
Et si seuelement je mets:

Dim txtbox
As System.Windows.Forms.TextBox =
Me.Controls(
"TextBox1")
MsgBox(txtbox.Name)     'Erreur: La référence d'objet n'est pas définie à une instance d'un objet.
Messages postés
883
Date d'inscription
vendredi 3 novembre 2000
Statut
Membre
Dernière intervention
3 mars 2009
7
J'aime bien les frites...