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

Messages postés
9
Date d'inscription
samedi 1 février 2003
Dernière intervention
10 mars 2010
- 10 mars 2010 à 12:11 - Dernière réponse :
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
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"
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 10 mars 2010 à 12:20
3
Merci
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]

Merci PCPT 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de PCPT
Meilleure réponse
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- 10 mars 2010 à 16:13
3
Merci
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

Merci cs_casy 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 86 internautes ce mois-ci

Commenter la réponse de cs_casy
Messages postés
9
Date d'inscription
samedi 1 février 2003
Dernière intervention
10 mars 2010
- 10 mars 2010 à 15:03
0
Merci
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.

++
Commenter la réponse de imajneb
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 10 mars 2010 à 15:55
0
Merci
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
Commenter la réponse de PCPT
Messages postés
9
Date d'inscription
samedi 1 février 2003
Dernière intervention
10 mars 2010
- 10 mars 2010 à 16:23
0
Merci
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.

++
Commenter la réponse de imajneb
Messages postés
9
Date d'inscription
samedi 1 février 2003
Dernière intervention
10 mars 2010
- 10 mars 2010 à 16:41
0
Merci
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.

++
Commenter la réponse de imajneb
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 10 mars 2010 à 17:10
0
Merci
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

++
Commenter la réponse de PCPT
Messages postés
7745
Date d'inscription
mercredi 1 septembre 2004
Dernière intervention
24 septembre 2014
- 10 mars 2010 à 17:16
0
Merci
Sacré PCPT, il perd pas de temps


[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Commenter la réponse de cs_casy
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
- 10 mars 2010 à 18:00
0
Merci
merci casy

(j'ai aussi mis pour VB6, avec groupes de controles)
Commenter la réponse de PCPT

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.