Form1.Controls en VB.Net

Résolu
imajneb Messages postés 9 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 10 mars 2010 - 10 mars 2010 à 12:11
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 10 mars 2010 à 18:00
Bonjour,

Je cherche à convertir cette ligne de code de VB6 à VB.NET.

Bien que la syntaxe soit correcte en VB.NET, ca provoque une erreur.

Une idée?

En VB6:
Form1.Controls("Textbox1").Text= "BlaBla"
A voir également:

9 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 mars 2010 à 12:20
salut,

Form1.Controls("Textbox1") renvoie un objet de type CONTROL
pour l'avoir de type TEXTBOX, il faut donc convertir => CAST

(syntaxe à vérifier)
directcast(Form1.Controls("Textbox1"), system.windows.forms.textbox).text="blabla"


nb : si le code est dans FORM1, remplace form1 par me

++
[hr]
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 mars 2010 à 16:13
Petite précision :
(peut-être que ton erreur vient de là, je sais pas)

Contrairement à VB6 ou tous les contrôles d'une Form sont mis dans la collection Controls de la Form, en .Net chaque contrôle est mis dans la collection Controls de son contrôle Parent (ou container)

Ainsi, par exemple, un Textbox qui est positionné sur un Panel, lui-même positionné sur la Form.
Me.Controls("TextBox1") marche en VB6, mais renvoie rien en .Net, TextBox1 ne fait pas parti de la collection des contrôles de la Form.
En .Net il faudra faire Me.Panel1.Controls("TextBox1")

Par contre tu pourrais utiliser Me.Controls.Find("TextBox1",True) en mettant le second paramètre à True pour faire la recherche dans tous les contrôles de la form ainsi que dans les contrôles enfant de ces contrôles et ainsi de suite.
Cette fonction est un peu plus complexe car elle ne renvoie pas un contrôle mais bien une collection de tous les contrôles correspondant au critère.

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
3
imajneb Messages postés 9 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 10 mars 2010
10 mars 2010 à 15:03
Salut PCPT,

Merci beaucoup pour ton aide.

Malheureusement, le code renvoyait la même erreur:

"L'exception NullReferenceException n'a pas été gérée"
"La référence d'objet n'est pas définie à une instance d'un objet."

J'ai alors modifié les "paramètres" du projet, au niveau de l'onglet compileur et onglet Application.
Maintenant ca fonctionne, mais je ne sais pas quels paramètres a permis de le refaire fonctionner. J'ai beau essayer de mettre comme avant, l'erreur ne se produit plus.

Pour info, VB.NET 2005.

++
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 mars 2010 à 15:55
peut-être juste que les options de VS indiquaient de ne pas re-compiler le code avant de l'executer, du coup il lançait l'ancienne version (pas les modifs indiquées)

mais si tout va c'est bien

bonne continuation
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
imajneb Messages postés 9 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 10 mars 2010
10 mars 2010 à 16:23
Merci à tout les deux pour vos réponses.

J'ai fait un peu plus de test. Et effectivement cela vient d'un controle GroupBox, qui supprime TextBox1 de la collection de Form1.

Il faut donc écrire:

Form1.GroupBox1.Controls("Textbox1").Text= "BlaBla"

Cela fonctionne également avec le direct cast, pour ceux qui aime la rigeur.

++
0
imajneb Messages postés 9 Date d'inscription samedi 1 février 2003 Statut Membre Dernière intervention 10 mars 2010
10 mars 2010 à 16:41
Voici le code utilisant Controls.Find et qui marche très bien :

Dim i As Integer
Dim ctrls() As Control = Me.Controls.Find("TextBox1", True)
For i = 0 To UBound(ctrls)
If ctrls(i).Name = "TextBox1" Then 'On verifie que le controle est le bon
ctrls(i).Text = "BlaBla"
End If
Next


Merci pour votre aide.

++
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 mars 2010 à 17:10
question qui revient assez souvent (control depuis nom, cast)

la fonction est donc dispo ici :
http://www.codyx.org/snippet_recuperer-objet-control-depuis-son-name_865.aspx

++
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 mars 2010 à 17:16
Sacré PCPT, il perd pas de temps


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
10 mars 2010 à 18:00
merci casy

(j'ai aussi mis pour VB6, avec groupes de controles)
0
Rejoignez-nous