Designation d'un controle par un nom [Résolu]

Signaler
Messages postés
82
Date d'inscription
dimanche 15 avril 2001
Statut
Membre
Dernière intervention
20 novembre 2012
-
sebrs1
Messages postés
82
Date d'inscription
dimanche 15 avril 2001
Statut
Membre
Dernière intervention
20 novembre 2012
-
Salut tout le monde. je suis en stage informatique et je fait du dotnet
je créer des controles dynamiquement dans mon application et je voulais savoir si CT possible de les utiliser directement par leur nom. Apparemment on peut les utilser comme ça
Me.controls(integer)

mais ce que je voudrais c'est genre me.controls("mon_controle_1")
c'est possible un truc dans le style?

jme fait comprendre? :)
merci d'avance

@+
Sebrs1

19 réponses

Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Alors, on peut penser que tu n'as pas le 2.0.
vérifies dans les paramètres de Windows (Ajout suppression de programmes), si tu as le 2.0, tu le trouveras dans la liste!

à+

PS: si tu ne l'as pas, sois tu te le procures, soit tu t'écris un observateur secondaire, qui reçoit un clé de type String, et qui énumère la collection de control jusqu'à ce qu'il trouve la bonne clé. Après quoi, il te renvoie la référence au control trouvé.
rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
33
Tout à fait, à partir du moment ou la propriété .Name du controle est renseignée avec un nom unique

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
82
Date d'inscription
dimanche 15 avril 2001
Statut
Membre
Dernière intervention
20 novembre 2012

ouai mais comment est-ce que je dois faire?
parce que si je met me.controls("moncontrol") il me met une erreur de cast de "moncontrol" en integer....

@+
Sebrs1
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
33
exemple :

        Dim ctrl As New Button
        ctrl.Name = "LeBoutonAControler"
        Me.Controls.Add(ctrl)

        Me.Controls("LeBoutonAControler").BackColor = Color.Red
        Me.Controls("LeBoutonAControler").Text = "Ca Marche"
        Me.Controls("LeBoutonAControler").Visible = True
        Me.Controls("LeBoutonAControler").Location = New Point(50, 25)

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
82
Date d'inscription
dimanche 15 avril 2001
Statut
Membre
Dernière intervention
20 novembre 2012

ben ecoute moi sa marche pas, en plus je manipule aussi des listbox alors g pas acces aux propriétés items  qui sont propres aux listbox ...

@+
Sebrs1

PS (qui ne signifie pas playstation :-)) : visitez mon site qui fait ses début svp
http://universal-glandeur.fr.st
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
33
C'est plutot étrange.

T'es bien en VB2005 ?

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
82
Date d'inscription
dimanche 15 avril 2001
Statut
Membre
Dernière intervention
20 novembre 2012

je developpe en VB.net
donc ptetre que ton exemple marche en VB normal mais sa a pas l'air de marcher pour mon truc, il aime pas :)

@+
Sebrs1

PS (qui ne signifie pas playstation :-)) : visitez mon site qui fait ses début svp
http://universal-glandeur.fr.st
Messages postés
66
Date d'inscription
samedi 24 février 2007
Statut
Membre
Dernière intervention
7 octobre 2007

Salut, je suis en Vb 2005 et ceci marche :

Dim ctrl As New ListBox
        ctrl.Name = "LaListBoxAControler"
        Me.Controls.Add(ctrl)

        Dim MyListBox As ListBox = Me.Controls("LeBoutonAControler")

        MyListBox.Items.Add("Salut")
        MyListBox.Items.Add("ca")
        MyListBox.Items.Add("va ?")

si ca ne marche pas, montre nous comment tu fait pour instancier tes controles et les placer sur ton formulaire.

A plus.
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
33
Mon code est fait en VB2005, c'est à dire du VB .NET. Mais si tu dit VB.Net tu veux surrement dire VB.Net 2003.
Je ne l'ai pas sous la main pour tester, il se peut qu'il y ait quelques petites différences.

Ca bloque sur quelle ligne exactement ??? (éventuellement, met ton code s'il ne s'agit pas du mien que tu teste)

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
82
Date d'inscription
dimanche 15 avril 2001
Statut
Membre
Dernière intervention
20 novembre 2012

alors voila comment ma listebox est instanciée :

'1 listbox pour les employes
Dim lst
As
New ListBox()
lst.Size =
New Size(200, 95)
lst.Location =
New Point(184, 24)
lst.Name = "lst_" & nombrePlanning.ToString

et quand j'essaye de faire ça :
Dim
lst
As ListBox = TabPage1.Controls("lst_" & num)

ben sa met comme quoi le cast de "lst_" & num en Integer est non-valide, parce qu'a la base dans les parenthese, il attend un entier et non une chaine
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
33
Sait-on jamais, peut-etre en faisant
Dim nom as String = "lst_" & num
Dim
lst
As ListBox = TabPage1.Controls(nom)

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
66
Date d'inscription
samedi 24 février 2007
Statut
Membre
Dernière intervention
7 octobre 2007

Bizzare, ton code ne provoque aucune erreur chez moi. Et si tu fait :

Dim lst As ListBox = TabPage1.Controls("lst_" & num.ToSting)

A plus.
Messages postés
82
Date d'inscription
dimanche 15 avril 2001
Statut
Membre
Dernière intervention
20 novembre 2012

pas besoin de mettre en rouge et gros, l'erreur est toujours la même lol voici exactement ce que ça dit :


Une exception non gérée du type 'System.InvalidCastException' s'est produite dans microsoft.visualbasic.dll


Informations supplémentaires : Cast de la chaîne "lst_0" en type 'Integer' non valide.

donc voila
Messages postés
66
Date d'inscription
samedi 24 février 2007
Statut
Membre
Dernière intervention
7 octobre 2007

Ce que je comprend pas c'est pourquoi il essaye de caster en integer alors qu'il éxiste une surcharge qui utilise une chaine de litéral.
Le TabPage1 est bien un Controle TabControl ? Comment tu l'ajoute sur ta feuille (au moment du design ou tu l'instancie par le code) ?
Messages postés
66
Date d'inscription
samedi 24 février 2007
Statut
Membre
Dernière intervention
7 octobre 2007

Au fait, tu est en VB2005 ou VB2003 ? Combien de surcharges tu a pour la méthode TabPage1.controls() ?
Messages postés
794
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
12 juin 2012
5
Salut sebrs1, salut à tous,

ton bout de code était bref, mais malheureusement, il laisse planer tout un tas de doutes, avec par exemple, la 1ère instance de lst se retrouve-t-elle ajoutée dans la collection controls du TabPage1?.

d'où mes questions :

- es-tu sûr que num contient une valeur?
- es-tu sûr que la concaténation donne bien une clé valide (correspondant donc au name d'un control existant dans TabPage1.Controls)?
- es-tu sûr que ta ListBox est bien ajoutée dans la collection controls du TabPage (pas visuellement, mais belle et bien contenue dans un parent)? D'accord, c'est un peu la même question, mais raison de plus pour se la poser :)

Pour être plus généraliste, et corroborer ce que t'ont dit les autres membres, et pour que personne ne pense que tu hallucines, il semble en effet qu'on puisse accéder à un objet de type Control.ControlCollection (System.Windows.Forms) via son membre Item, qui tolère une valeur de type Int32 (dans les versions 2.0, 1.1 et 1.0 du .NET Framework, et dans les versions 2.0 et 1.0 du .NET Compact Framework) ou de type String (mais ce, uniquement dans la version 2.0 du .NET Framework).

Alors, s'il te plait, n'aies pas honte de ne pas avoir beaucoup de sous, et dis nous précisément quelle version tu utilises? :)

à+
rvblog<sup>n
Je veux ton bien....et je l'aurais....mieux vaut tard...que trop tard!</sup>
Messages postés
82
Date d'inscription
dimanche 15 avril 2001
Statut
Membre
Dernière intervention
20 novembre 2012

oui c bien un tabcontrol et il est ajouté en mode design.
entre 2003 et 2005 je sais pas. mais je sais qu'il m'indique qu'il y a que la possibilité av des integer.

@+
Sebrs1
Messages postés
66
Date d'inscription
samedi 24 février 2007
Statut
Membre
Dernière intervention
7 octobre 2007

Pour savoir si tu a 2003 ou 2005, regarde dans le menu '?'->'A propos de visual studio'. La 2005 corespond à la version 8.0 et la version du framework est indiqué.

Si tu dis que tu n'a que la surcharge avec interger, c'est certainement .Net 1.0 ou 1.1.
regarde si tu a : TabPage1.controls.find(Key as String, Boolean)  ca te renvois un tableau de controles, mais si tu n'a qu'un controle par nom, alors le tableau ne contiendras qu'un objet.
Messages postés
82
Date d'inscription
dimanche 15 avril 2001
Statut
Membre
Dernière intervention
20 novembre 2012

merci pour vos réponse, jpense que je ferai ma propre méthode pour chercher un composant a partir du nom. y'a pas d'autres solutions
rvblog t'as peut-etre zappé le tout debut de mon premier message mais j'ai dis que j'étais en stage, donc les sous , c'est pas moi qui les débourses, et donc jm'en fou un peu.

merci

@+
Sebrs1