VB Melanger des textboxs
Résolu
Qual
-
Qual -
Qual -
Bonjour , je cherche désespérément le moyen de mélanger mes 4 textboxs.
J'ai 4 textboxs, et en dessous, j'ai un bouton " Aléatoire", j'aimerais que lorsque que l'on clique sur le bouton aléatoire, le contenu des 4 textboxs se mélangent, sans doublons.
Est ce que quelqu'un aurait une piste ?
J'ai 4 textboxs, et en dessous, j'ai un bouton " Aléatoire", j'aimerais que lorsque que l'on clique sur le bouton aléatoire, le contenu des 4 textboxs se mélangent, sans doublons.
Est ce que quelqu'un aurait une piste ?
A voir également:
- VB Melanger des textboxs
- Vb - Télécharger - Langages
- Vb audio cable - Télécharger - Audio & Musique
- Vb editor - Télécharger - Langages
- Vb runtime - Télécharger - Divers Utilitaires
- Vb express - Télécharger - Langages
15 réponses
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)
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+
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
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.
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.
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'.
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.