Bonjour,
j'ai 64 textbox nomées de a1 a a64
j'aimerais tester dans une boucle les textbox vides
merci
Version imprimable
Bonjour,
j'ai 64 textbox nomées de a1 a a64
j'aimerais tester dans une boucle les textbox vides
merci
Bonjour,
Quel language ?
Ex : en vb
Pour traiter proprement si tous les TextBox (et seulement ceux-ci) sont dans un conteneur (panel, groupbox (, form)).
Appel TestTextBox(Panel1).Code:
1
2
3
4
5 Sub TestTextBox(ByVal conteneur As Control) For Each txt As TextBox In conteneur.Controls.OfType(Of TextBox)() If txt.Text = "" Then MessageBox.Show("vide") Else MessageBox.Show("renseigné") Next End Sub
Si d'autres Textbox ne sont pas à traiter (noms autres) dans le conteneur
Appel TestTextBox2(Me) (ou Me représente le form par exemple, mais ce pourrait être un panel ou groupbox)Code:
1
2
3
4
5 Sub TestTextBox2(ByVal conteneur As Control) For i As Integer = 1 To 64 If DirectCast(conteneur.Controls("a" & i.ToString), TextBox).Text = "" Then MessageBox.Show("vide") Else MessageBox.Show("renseigné") Next End Sub
j'ai créé une fonction pour mes calculs j'ai donc mis le code suivant:
et j'ai l'erreur suivante:Code:
1
2
3
4
5
6 Function calculordi1() If b.seul.Checked = True Then Dim conteneur As Control For i As Integer = 1 To 64 If DirectCast(conteneur.Controls("a" & i.ToString), TextBox).Text = "" Then MessageBox.Show("vide") Else MessageBox.Show("renseigné") Next
la variable conteneur est utilisée avant qu'une valeur ne lui est été assignée.
voila, ca plante? merci pour votre aide
Normal aucun contrôle n'est associé à conteneur.
Regardez l'utilisation de mon code dans les appels
Panel1 étant un contrôle existant sur la form.Code:TestTextBox(Panel1)
La fonction TestTextBox reçoit le contrôle Panel1 et travaille avec celui-ci. (elle l'assigne à conteneur)
Dans votre déclaration Dim conteneur As Control conteneur vaut nothing, aucune valeur ne lui est assigné.
- Soit vous l'utilisez comme paramètre comme dans mon exemple,
- soit vous utilisez directement le contrôle (présent sur votre form ou la form) qui contient vos TextBox
Mais s'ils sont tous dans un conteneur (panel ou groupbox) et seulement eux, il est préférable d'utiliser la 1 ère méthode, c'est plus propre.Code:If DirectCast(MonPanel.Controls("a" & i.ToString), TextBox).Text = "" Then MessageBox.Show("vide") Else MessageBox.Show("renseigné")
Le Cours VB.NET de Philippe Lasserre est une mine d'information, très bien pour apprendre.
C'est bon, ça marche, j'avais déclaré 2 fois la variable!!!
voici mon code
Code:
1
2
3
4
5
6
7
8 Function calculordi1() If b.seul.Checked = True Then compteur = 0 For i As Integer = 1 To 64 If DirectCast(Panel1.Controls("a" & i.ToString), TextBox).Text = "" Then compteur = compteur + 1 Next a.erreur.Text = compteur a.erreur.Visible = True
C'est légèrement accessoire, mais le DirectCast ne sert à rien ; la propriété Text est définie au niveau de la classe Control, ce qui est le résultat de l'indéxeur sur Controls donc pas besoin de passer par TextBox
Exact, directCast pourra servir pour accéder aux propriétés spécifiques d'un contrôle.
je ne vois toujours pas la solution?