Form1.Controls en VB.Net [Résolu]

Signaler
Messages postés
9
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
10 mars 2010
-
PCPT
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
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"

9 réponses

Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
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]
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
32
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
Messages postés
9
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
10 mars 2010

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.

++
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
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
Messages postés
9
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
10 mars 2010

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.

++
Messages postés
9
Date d'inscription
samedi 1 février 2003
Statut
Membre
Dernière intervention
10 mars 2010

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.

++
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
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

++
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
32
Sacré PCPT, il perd pas de temps


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
13298
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
30
merci casy

(j'ai aussi mis pour VB6, avec groupes de controles)