VB Melanger des textboxs
Résolu/Fermé
A voir également:
- VB Melanger des textboxs
- Vb cable - Télécharger - Audio & Musique
- Vb - Télécharger - Langages
- Vb editor - Télécharger - Langages
- Mélanger enceintes 6 et 8 ohms ✓ - Forum Enceintes / HiFi
- Vb runtime - Télécharger - Divers Utilitaires
15 réponses
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
2 mai 2010 à 20:54
2 mai 2010 à 20:54
Test ça, à coller dans le formulaire:
;o)
Option Explicit Private mTab() Private ind As Integer Private Sub BoutonAleatoire_Click() ind = 0 InitTab SearchAlea End Sub Private Sub InitTab() Dim txt As Control ReDim mTab(0) For Each txt In Me.Controls If TypeOf txt Is TextBox Then ReDim Preserve mTab(ind) mTab(ind) = txt.Text ind = ind + 1 txt.Text = "" End If Next txt End Sub Private Sub SearchAlea() Dim str As Variant Dim cpt As Integer While cpt <= 3 str = returnAlea If doesExistAlea(str) = False Then Affiche (str) cpt = cpt + 1 End If Wend End Sub Private Sub Affiche(ByVal str As Variant) Dim txt As Control For Each txt In Me.Controls If TypeOf txt Is TextBox Then If txt.Text = "" Then txt.Text = mTab(str) Exit Sub End If End If Next txt End Sub Private Function returnAlea() As Variant Dim alea As Integer Randomize Timer alea = CInt(Rnd * (ind - 1)) If alea > UBound(mTab()) Then alea = UBound(mTab()) returnAlea = alea End Function Private Function doesExistAlea(ByVal str As Variant) As Boolean Dim txt As Control For Each txt In Me.Controls If TypeOf txt Is TextBox Then If txt.Text = mTab(str) Then doesExistAlea = True Exit Function End If End If Next txt doesExistAlea = False End Function
;o)
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
2 mai 2010 à 23:41
2 mai 2010 à 23:41
Bonjour,
Une autre solution ?
J'ai choisi de faire une collection cela raccouci le code du bouton.
Dans le tag de 4 textBox mettre de 1 à 4 .. textBox1.Tag =1, textBox2.Tag =2.. etc
Comme tu emploi des textBox je suppose que tu est en VBA ?
Code à coller dans le module d'ub UserForm
Si les TextBox sont sur une feuille le code doit être légérement modifié.
A+
Une autre solution ?
J'ai choisi de faire une collection cela raccouci le code du bouton.
Dans le tag de 4 textBox mettre de 1 à 4 .. textBox1.Tag =1, textBox2.Tag =2.. etc
Comme tu emploi des textBox je suppose que tu est en VBA ?
Code à coller dans le module d'ub UserForm
Si les TextBox sont sur une feuille le code doit être légérement modifié.
Option Explicit Dim CoText As Collection Private Sub UserForm_Initialize() Dim Cl Set CoText = New Collection For Each Cl In Me.Controls If Cl.Tag <> "" Then CoText.Add Cl, Cl.Tag End If Next Cl End Sub Private Sub CommandButton1_Click() Dim AR(1 To 4) Dim i As Byte, n, R For i = 1 To 4: AR(i) = CoText(i): Next i Randomize For i = 1 To 4 Reco: R = Int((4 * Rnd) + 1) If AR(R) <> "" Then CoText(i) = AR(R): AR(R) = "" Else: GoTo Reco End If Next i End Sub
A+
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
3 mai 2010 à 10:13
3 mai 2010 à 10:13
Bonjour,
La précision sur la version utilisée aurait certainement été utile et aurait fait gagner du temps à tout le monde.
Je n'ai pas la version 2010. J'ai importé le projet VB 6 dans la version VB 2008.
Voilà ce que ça donne, avec le code que j'ai donné plus haut:
Ce n'est pas très propre.
Il faut réorganiser le code. Certaines méthodes n'ont rien à faire dans la classe de la form.
;o)
La précision sur la version utilisée aurait certainement été utile et aurait fait gagner du temps à tout le monde.
Je n'ai pas la version 2010. J'ai importé le projet VB 6 dans la version VB 2008.
Voilà ce que ça donne, avec le code que j'ai donné plus haut:
Option Strict Off Option Explicit On Imports VB = Microsoft.VisualBasic Friend Class Form1 Inherits System.Windows.Forms.Form Private mTab() As Object Private ind As Short Private Sub BoutonAleatoire_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BoutonAleatoire.Click ind = 0 InitTab() SearchAlea() End Sub Private Sub InitTab() Dim txt As System.Windows.Forms.Control ReDim mTab(0) For Each txt In Me.Controls If TypeOf txt Is System.Windows.Forms.TextBox Then ReDim Preserve mTab(ind) mTab(ind) = txt.Text ind = ind + 1 txt.Text = "" End If Next txt End Sub Private Sub SearchAlea() Dim str As Object Dim cpt As Short While cpt <= 3 str = returnAlea() If doesExistAlea(str) = False Then Affiche((str)) cpt = cpt + 1 End If End While End Sub Private Sub Affiche(ByVal str As Object) Dim txt As System.Windows.Forms.Control For Each txt In Me.Controls If TypeOf txt Is System.Windows.Forms.TextBox Then If txt.Text = "" Then txt.Text = mTab(str) Exit Sub End If End If Next txt End Sub Private Function returnAlea() As Object Dim alea As Short Randomize(VB.Timer()) alea = CShort(Rnd() * (ind - 1)) If alea > UBound(mTab) Then alea = UBound(mTab) returnAlea = alea End Function Private Function doesExistAlea(ByVal str As Object) As Boolean Dim txt As System.Windows.Forms.Control For Each txt In Me.Controls If TypeOf txt Is System.Windows.Forms.TextBox Then If txt.Text = mTab(str) Then doesExistAlea = True Exit Function End If End If Next txt doesExistAlea = False End Function End Class
Ce n'est pas très propre.
Il faut réorganiser le code. Certaines méthodes n'ont rien à faire dans la classe de la form.
;o)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
2 mai 2010 à 19:48
2 mai 2010 à 19:48
Bonjour,
Est-ce que les textboxes contiennent déjà un contenu ?
;o)
Est-ce que les textboxes contiennent déjà un contenu ?
;o)
par défaut :
Player 1
Player 2
Player 3
Player 4
C'est un logiciel pour géré des crews et brackets de tournois. Le contenu des textboxs est récupéré ensuite par des labels, etc pour la gestion de l'évent.
Player 1
Player 2
Player 3
Player 4
C'est un logiciel pour géré des crews et brackets de tournois. Le contenu des textboxs est récupéré ensuite par des labels, etc pour la gestion de l'évent.
Bon j'ai essayer, et j'ai des problèmes pour les deux versions....
Je tiens a préciser que j'utilise visual studio 2010 RC
et sinon ce n'est pas du VBA :p
Pour le code de lermite222
CoText(i) = AR(R)
Ce morceau me donne l'erreur :
Property 'Item' is 'ReadOnly'.
sinon j'ai du changer de 1 à 4 en 0 à 3 car apparemment le plus petit ne peut être que 0 ._.
pour le premier code, j'ai des fonctions telle que Randomize Timer qui ne fonctionne pas, la syntaxe n'as pas l'air d'être compatible.
Je tiens a préciser que j'utilise visual studio 2010 RC
et sinon ce n'est pas du VBA :p
Pour le code de lermite222
CoText(i) = AR(R)
Ce morceau me donne l'erreur :
Property 'Item' is 'ReadOnly'.
sinon j'ai du changer de 1 à 4 en 0 à 3 car apparemment le plus petit ne peut être que 0 ._.
pour le premier code, j'ai des fonctions telle que Randomize Timer qui ne fonctionne pas, la syntaxe n'as pas l'air d'être compatible.
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
3 mai 2010 à 00:46
3 mai 2010 à 00:46
Comme quoi... Quand ont ne précise pas le language employer !!!!!
Et tu dis ensuite...
Je tiens a préciser que j'utilise visual studio 2010 RC
Mais tu utilise quoi, le C le VB..
Et de toute façon c'est en .Net
En gardant le même principe que dans mon code mais en employant les Index il y a possibilité d'y arriver.
Tu dis.
Et tu dis ensuite...
Je tiens a préciser que j'utilise visual studio 2010 RC
Mais tu utilise quoi, le C le VB..
Et de toute façon c'est en .Net
En gardant le même principe que dans mon code mais en employant les Index il y a possibilité d'y arriver.
Tu dis.
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
3 mai 2010 à 00:57
3 mai 2010 à 00:57
Rectifier avec des contrôles Text indexé de 0 à 3
Et tout le reste n'est pas nécessaire.
Randomize n'est pas obligatoir, c'est pour réinitialiser le pseudo compteur aléatoir RND.
C'est en VB6 mais ça devrait pas poser trop de problème.
Private Sub Command1_Click() Dim AR(3) Dim i As Byte, R For i = 0 To 3: AR(i) = Text1(i): Next i For i = 0 To 3 Reco: R = Int((4 * Rnd) + 1) - 1 'moins 1 pour avoir le zéro If AR(R) <> "" Then Text1(i) = AR(R): AR(R) = "" Else: GoTo Reco End If Next i End Sub
Et tout le reste n'est pas nécessaire.
Randomize n'est pas obligatoir, c'est pour réinitialiser le pseudo compteur aléatoir RND.
C'est en VB6 mais ça devrait pas poser trop de problème.
j'ai remplacer text1 par textbox1.text
TextBox1.Text(i) = AR(R)
Ce morceau me donne l'erreur :
Property 'chars' is 'ReadOnly'.
TextBox1.Text(i) = AR(R)
Ce morceau me donne l'erreur :
Property 'chars' is 'ReadOnly'.
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
Modifié par lermite222 le 3/05/2010 à 01:13
Modifié par lermite222 le 3/05/2010 à 01:13
Ton VB c'est bien du Visual basic non ?
Tu ne sais pas ce que c'est des contrôles indexés ?
Sur ta feuille tu colle un textbox (qu'importe le nom)
Tu le sélectionne (qu'il ai des poignées.
Tu tape Ctrl + C
ensuite Ctrl + V
Tu va avoir un message.. Ce textbox existe déja voulez_vou... tu dis oui
Ensuite tu tape encore deux fois Ctrl + V et tu auras tes 4 TextBox
si tu va voir dans la fenêtre des propriétés tu verra qu'il auront un index de 0 à 3
Tu ne doit pas les renommer.
et si le nom est textbox1
tu change Text1(i) par TextBox1(i).text
Essaye déja ça...
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
Tu ne sais pas ce que c'est des contrôles indexés ?
Sur ta feuille tu colle un textbox (qu'importe le nom)
Tu le sélectionne (qu'il ai des poignées.
Tu tape Ctrl + C
ensuite Ctrl + V
Tu va avoir un message.. Ce textbox existe déja voulez_vou... tu dis oui
Ensuite tu tape encore deux fois Ctrl + V et tu auras tes 4 TextBox
si tu va voir dans la fenêtre des propriétés tu verra qu'il auront un index de 0 à 3
Tu ne doit pas les renommer.
et si le nom est textbox1
tu change Text1(i) par TextBox1(i).text
Essaye déja ça...
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
j'utilise des windows forms et non des feuilles.
textbox1 dans les lignes
For i = 0 To 3 : AR(i) = TextBox1(i).text : Next i
et
TextBox1(i).text = AR(R) : AR(R) = ""
me donne l'erreur
Class 'System.Windows.Forms.TextBox' cannot be indexed because it has no default property.
textbox1 dans les lignes
For i = 0 To 3 : AR(i) = TextBox1(i).text : Next i
et
TextBox1(i).text = AR(R) : AR(R) = ""
me donne l'erreur
Class 'System.Windows.Forms.TextBox' cannot be indexed because it has no default property.
lermite222
Messages postés
8702
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
3 mai 2010 à 01:55
3 mai 2010 à 01:55
Bon, tu me confirme que tu est bien en VB.Net, malheureusement je ne connaîs pas la syntaxe des versions .Net.
Le principe de la méthode que je t'ai donné est bonne, à toi de trouver la syntaxe adéquoite à ta version.
Désolé mais je sais pas aller plus loin.
A+
Le principe de la méthode que je t'ai donné est bonne, à toi de trouver la syntaxe adéquoite à ta version.
Désolé mais je sais pas aller plus loin.
A+