anass_f
Messages postés10Date d'inscriptionsamedi 19 août 2006StatutMembreDernière intervention20 octobre 2006
-
24 août 2006 à 13:09
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 2009
-
24 août 2006 à 16:33
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.
A voir également:
Comment référencer une variable par un objet deja existent en utilisant "For ...
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 24 août 2006 à 13:29
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
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
anass_f
Messages postés10Date d'inscriptionsamedi 19 août 2006StatutMembreDernière intervention20 octobre 20061 24 août 2006 à 14:46
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
lesdis
Messages postés403Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention 7 août 2020 24 août 2006 à 15:05
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)
anass_f
Messages postés10Date d'inscriptionsamedi 19 août 2006StatutMembreDernière intervention20 octobre 20061 24 août 2006 à 16:16
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.