Contrôles indexés bouton[1], bouton[2]...

domsig Messages postés 125 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 11 mai 2010 - 2 sept. 2005 à 11:27
domsig Messages postés 125 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 11 mai 2010 - 7 sept. 2005 à 08:41
bonjour

pour mon boulot je sens que je vais être obligé de passer à vb.net... alors j'essaie de mon côté et je bute vite !
En VB6 si j'ai 3 boutons par exemple sur une form je pouvais les appeler btn[1] à btn[3] et je pouvais les bidouiller dans une boucle.
Je m'aperçois qu'il n'y a plus la propriété "index" sur les contrôles, comment dois-je alors procéder ?
Pouvez-vous me donner un petit (?) exemple pour 2 ou 3 boutons sur une form ?
Merci d'avance !

10 réponses

Utilisateur anonyme
2 sept. 2005 à 11:56
Bonjour,



Private Btn(2) As System.Windows.Forms.Button



Private Sub InitBtn()

For i As Integer = 0 To 2

Btn(i) = New System.Windows.Forms.Button

Btn(i).Location = New Point(10, (i + 1) * 24)

Btn(i).Size = New Size(75, 23)

Btn(i).Text = "My Btn " & i.ToString

AddHandler Btn(i).Click, AddressOf Btn_Click

MyBase.Controls.Add(Btn(i))

Next i

End Sub



Private Sub Btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

MsgBox(CType(sender, System.Windows.Forms.Button).Text)

End Sub


ChRB
<hr size="2" width="100%">
Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.
0
cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 1
2 sept. 2005 à 12:03
Salut,



Tu peux aussi faire une itération sur la propriété Controls de la form
et tester si c'est un bouton. Tout dépend de ce que tu veux faire.
Enfin, voici une autre technique.

Ca donne quelque chose comme:



For Each ctrl as Control in Me.Controls

If TypeOf ctrl is Button then

'Traitements bouton

End If

Next


Chris


N'oubliez pas de cloturer votre post.
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
2 sept. 2005 à 13:26
69chris < Le seul pb c'est que l'enumération de la collection Controls est en lecture seule, ce qui limite parfois.
Je ne suis aps encore une bete en VB.NEt mais il me semble que la technique du tableau est plus proche de tout ce que l'on faisait en VB6
0
cs_69chris Messages postés 318 Date d'inscription jeudi 30 janvier 2003 Statut Membre Dernière intervention 30 décembre 2005 1
2 sept. 2005 à 14:28
Ouais, je sais. Dans le cas où tu modifies la collection, tu te fais
insulter c'est clair. Une boucle While feras alors générelement
l'affaire.

C'est simplement une piste/technique suplémentaire, j'avais pas noté le Controls.Add().

D'autre part, pour les comparaisons entre VB6 et VB.NET, je pourrais
lancer mon avis sur le sujet des langages .NET, les trollistes c'en
donneraient à coeur joie et ça m'a déjà rapporté de grosses réactions
de VBistes américains....


Chris


N'oubliez pas de cloturer votre post.
0

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

Posez votre question
domsig Messages postés 125 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 11 mai 2010
2 sept. 2005 à 17:57
quelle rapidité !

malheureusement je ne pourrai essayer que lundi, vb.net n'est pas
installé chez moi ! je vous tiens au courant et n'omettrai pas de
cliquer sur "réponse acceptée" le cas échéant (mais je suis confiant)

merci encore et à lundi !
0
domsig Messages postés 125 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 11 mai 2010
5 sept. 2005 à 09:02
bonjour

à Charles Racaud : ta solution fonctionne, merci. Mais quand je clique sur le bouton choisi, je voudrais récupérer "l'index" (le "i" dans ton exemple) plutôt que le texte du bouton...
merci d'avance, et merci à tous les autres !
0
Utilisateur anonyme
5 sept. 2005 à 13:38
Bonjour,



Pour répondre à ta question:



Private Btn(2) As System.Windows.Forms.Button

Private Sub InitBtn()

For i As Integer = 0 To 2

Btn(i) = New System.Windows.Forms.Button

Btn(i).Location = New Point(10, (i + 1) * 24)

Btn(i).Size = New Size(75, 23)

Btn(i).Text = "My Btn " & i.ToString

Btn(i).Tag = i

AddHandler Btn(i).Click, AddressOf Btn_Click

MyBase.Controls.Add(Btn(i))

Next i

End Sub

Private Sub Btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

MsgBox(CType(sender, System.Windows.Forms.Button).Tag)

End Sub



Sinon, utilise "sender" qui renvoie le bouton sur lequel tu à cliquer.


ChRB
<hr size="2" width="100%">
Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.
0
domsig Messages postés 125 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 11 mai 2010
5 sept. 2005 à 15:15
bah la propriété tag n'existe pas...(parce que j'y avais pensé quand même !)
je fouille du côté du sender mais je ne vois pas trop ce que tu entends par là, mais je cherche !
si tu as la patience de préciser je suis preneur !
merci d'avance
0
Utilisateur anonyme
5 sept. 2005 à 16:05
Bon, bon

Il est vraie que cette propriété n'existe pas pour tous les contrôles.



Voilà donc la première méthode à laquelle j'avais pensé:



Private Btn(2) As System.Windows.Forms.Button

Private Sub InitBtn()

For i As Integer = 0 To 2

Btn(i) = New System.Windows.Forms.Button

Btn(i).Location = New Point(10, (i + 1) * 24)

Btn(i).Size = New Size(75, 23)

Btn(i).Text = "My Btn " & i.ToString

AddHandler Btn(i).Click, AddressOf Btn_Click

MyBase.Controls.Add(Btn(i))

Next i

End Sub

Private Sub Btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Dim Index As Integer = GetBtnIndex(CType(sender, System.Windows.Forms.Button))

MsgBox(Index.ToString)

End Sub

Private Function GetBtnIndex(ByVal BtnText As System.Windows.Forms.Button) As Integer

For i As Integer = 0 To 2

If Object.Equals(BtnText, Btn(i)) = True Then Return i

Next

Return -1

End Function


ChRB
<hr size="2" width="100%">
Merci de cliquer sur "Réponse acceptée" si une réponse vous convient.
0
domsig Messages postés 125 Date d'inscription lundi 6 septembre 2004 Statut Membre Dernière intervention 11 mai 2010
7 sept. 2005 à 08:41
bon ben ça marche pô.


Object.Equals il connaît pas, en tout cas pas "brut" comme ça (et comme je ne m'y connais pas assez pour affiner...."


je me suis débrouillé autrement, quand je clique sur un bouton je récupère les coordonnées de la souris et avec un algorithme je calcule le numéro du bouton, et ça ça fonctionne.


Merci quand même pour votre aide à tous
0
Rejoignez-nous