Probleme code avec des boutons et text box creer dans le code [Résolu]

Signaler
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020
-
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
bonjour,

J'arrive a créer des boutons par code et à changer leur couleurs une fois l'application lancer, mais lorsque je veux vérifier la couleur de ces bouton par rapport a une solution (mastermind) je n'arrive pas à trouver le code ou nom du bouton à rentrer dans mon tableau pour effectuer la vérification.

Quelqu'un saurait comment effectuer cette vérification??

J'ai le même soucis avec les text box que je crées par code mais je ne sais pas comment faire pour écrire dedans, car dans le code, il me dit que la text box n'est pas déclaré.

Merci de vos réponse

24 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Comme je te l'ai dit,
voir la méthode ShowDialog


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
tu aurais un peu du code de création à nous montrer ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Quand tu crée le bouton, il faut lui donner un nom (propriété Name). Ensuite comme c'est créé dynamiquement par le code ce n'est pas directement accessible leur de l'écriture du code. Il faut passer par la collection Controls du contener recevant le bouton créé (par défaut la Form, ou un panel, ou autre ...)

[i][b]---- Sevyc64 (alias Casy) ----
[hr]# LE PARTAGE EST NOTRE FORCE #/b/i
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

Private Sub GenererDesBoutons()
Dim BtnAbcisse = 26
Dim i As Integer

For i = 0 To 3
Dim btn As New Button
btn.Location = New Drawing.Point(BtnAbcisse, BtnOrdonnée)
btn.Size = New Size(47, 37)
btn.Name = "btn" + Str(i)
Me.Controls.Add(btn)
AddHandler btn.Click, AddressOf CouleurClick
BtnAbcisse = BtnAbcisse + 68
Next
End Sub


Public Sub GenereTextBox()
Dim txt As New TextBox
Dim i As Integer

For i = 0 To 3
txt.Location = New Drawing.Point(txtAbcisse, txtOrdonnee)
txt.Size = New Size(74, 37)
txt.Multiline = True
txt.Name = "txt" + Str(i + (NbreEssai - 1) * 4)
Me.Controls.Add(txt)
Next
txtOrdonnee = txtOrdonnee + 40
End Sub
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut

Il te faut écrire la sub CouleurClick

Mais tout d'abord ...
ta sub GenererDesBoutons est appellé à chaque tour ? donc à chaque fois tu crée 4 boutons
si c'est le cas tes boutons seront toujours
nommés btn0 btn1 btn2 btn3
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

c'est , le problème est résolu, il a fallu faire bcp de modification, je vais vous mettre les principale ligne de commande si vous voulez les voir :

Dim x As Integer

For x = 0 To 3
For Each ctrl As Control In Me.Controls
If ctrl.Name = "btn" + Trim(Str(x)) + Str(((NbreEssai - 1) * 4)) Then
TableauProposition(x) = ctrl.BackColor
End If

Next
Next
GenereTextBox(VerificationCouleur())
If btnEssai.Tag < NbreEssai Then

GenererDesBoutons()

BtnOrdonnée = BtnOrdonnée + 40
btnEssai.Tag = btnEssai.Tag + 1
btnEssai.Text = "Essai " + Str(btnEssai.Tag)
End If
End Sub
Private Sub GenererDesBoutons()
Dim BtnAbcisse = 26
Dim i As Integer

For i = 0 To 3
Dim btn As New Button
btn.Location = New Drawing.Point(BtnAbcisse, BtnOrdonnée)
btn.Size = New Size(47, 37)
btn.Name = "btn" + Trim(Str(i)) + Str(((NbreEssai - 1) * 4))
Me.Controls.Add(btn)
AddHandler btn.Click, AddressOf CouleurClick
TableauProposition(i) = couleur
BtnAbcisse = BtnAbcisse + 68
Next
End Sub
Public Sub GenereTextBox(ByVal rep As String)
Dim txt As New TextBox

Dim fnt As Font
fnt = Me.Font
txt.Location = New Drawing.Point(txtAbcisse, txtOrdonnee)
txt.Font = New Font(fnt.Name, 40, FontStyle.Regular)
txt.Size = New Size(130, 37)
txt.Multiline = True
txt.Name = "textb" + Str((NbreEssai - 1) * 4)
Me.Controls.Add(txt)
txt.Text = rep
txtOrdonnee = txtOrdonnee + 40


donc je rempli mon tableau de couleur avec la boucle for each.
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

et pour la sub couleur click

Private Sub Btna_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnRouge.Click, BtnBlanc.Click, BtnBleu.Click, BtnOrange.Click, BtnJaune.Click, BtnVert.Click, BtnNoir.Click, BtnViolet.Click
couleur = sender.backcolor
End Sub
Private Sub CouleurClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
sender.backcolor = couleur
End Sub
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonsoir

1 Si tu postes un code utilises la coloration
syntaxique 3ième icon à partir de droite

Si tu codes en vb.net prend la bonne habitude
de ne pas mélanger avec du vb6
2 clique projet -> proprieté en bas
clique onglet compile et met option strict On
clique onglet reference et decoche
la référence du nom Microsoft.VisualBasic.

et recompile ton projet
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

c'est a dire vb6?? je ne m'en suis jamais servit, j'ai commencé a codé sur vb.net il a 2 mois
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

par contre, ce que tu me dit de faire, me donne 26 erreurs, donc j'ai tous annulé
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
supprimer cette reference te permet de coder en VB.Net et non en pseudo VB.Net (VB6 dans .Net)

en gros, ne pas faire

Trim(Str(x))


mais

x.ToString().Trim()

etc.


Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Bonjour

Quand tu programmes avec le visual en vb.net
par défaut la reference visual basic est coché
qui veut dire tu peux utiliser des fonctions etc
du vb6 mais ce n'est pas recommandé parce que
beaucoup de fonctions sont obsolètes et d'autres
ont été réecrites en vb.net
et aussi tu prendras des bonnes habitudes
de ne pas mélanger les deux meme sans le savoir

comme tu dit tu as des erreurs qui provient de
ton code
donc apprend
à les corriger et ne pas faire comme tu as fait
donc je te conseille de remettre comme c'était
si tu veux tu peux envoyé ton code en mp
ou le poster ici
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

Public Class Fenetre
    Public couleur As Color
    Public Rand As System.Random = New System.Random
    Public c1 As Color
    Public Resultat As String
    Public BtnOrdonnée = 80
    Public NbreEssai, j, NbreCouleur As Integer
    Public txtAbcisse = 318
    Public txtOrdonnee = 80
    Dim i As Integer
    Public TableauProposition(3) As Color
    Public TableauDeSolution(3) As Color
    Public TableauJuste(3) As Integer
    Public TableauMauvais(3) As Integer
    Dim y As Integer

    Private Sub NouvellePartieToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles NouvellePartieToolStripMenuItem.Click

        If btnEssai.Tag = 0 Then
            'NbreEssai = InputBox("Quelle est votre nombre d'essai")
            'NbreEssai = 5
            'BtnSolutiona.Hide()
            'BtnSolutionb.Hide()
            'BtnSolutionc.Hide()
            'BtnSolutiond.Hide()

            BtnSolutiona.BackColor = Couleuraléatoire()
            BtnSolutionb.BackColor = Couleuraléatoire()
            BtnSolutionc.BackColor = Couleuraléatoire()
            BtnSolutiond.BackColor = Couleuraléatoire()
        End If

        If NbreCouleur = 4 Then
            BtnJaune.Visible = False
            BtnVert.Visible = False
            BtnNoir.Visible = False
            BtnViolet.Visible = False
        End If
        If NbreCouleur = 5 Then
            BtnVert.Visible = False
            BtnNoir.Visible = False
            BtnViolet.Visible = False
        End If
        If NbreCouleur = 6 Then
            BtnNoir.Visible = False
            BtnViolet.Visible = False
        End If
        If NbreCouleur = 7 Then
            BtnViolet.Visible = False
        End If

        btnEssai.Visible = True
        btnAgain.Visible = True

        GenererDesBoutons()

        BtnOrdonnée = BtnOrdonnée + 40

        btnEssai.Tag = btnEssai.Tag + 1
        btnEssai.Text = "Essai " + Str(btnEssai.Tag)

    End Sub
    Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEssai.Click
        TableauDeSolution(0) = BtnSolutiona.BackColor
        TableauDeSolution(1) = BtnSolutionb.BackColor
        TableauDeSolution(2) = BtnSolutionc.BackColor
        TableauDeSolution(3) = BtnSolutiond.BackColor

        Dim x As Integer

        For x = 0 To 3
            For Each ctrl As Control In Me.Controls
                If ctrl.Name = "btn" + Trim(Str(x)) + Str(((NbreEssai - 1) * 4)) Then
                    TableauProposition(x) = ctrl.BackColor
                End If

            Next
        Next
        If btnEssai.Tag <= NbreEssai Then
            GenereTextBox(VerificationCouleur())
        End If
        If btnEssai.Tag < NbreEssai Then
            GenererDesBoutons()
            BtnOrdonnée = BtnOrdonnée + 40
            btnEssai.Tag = btnEssai.Tag + 1
            btnEssai.Text = "Essai " + Str(btnEssai.Tag)
        End If
    End Sub
    Private Sub GenererDesBoutons()
        Dim BtnAbcisse = 26
        Dim i As Integer

        For i = 0 To 3
            Dim btn As New Button
            btn.Location = New Drawing.Point(BtnAbcisse, BtnOrdonnée)
            btn.Size = New Size(47, 37)
            btn.Name = "btn" + Trim(Str(i)) + Str(((NbreEssai - 1) * 4))
            Me.Controls.Add(btn)
            AddHandler btn.Click, AddressOf CouleurClick
            TableauProposition(i) = couleur
            BtnAbcisse = BtnAbcisse + 68
        Next
    End Sub
    Public Sub GenereTextBox(ByVal rep As String)
        Dim txt As New TextBox

        Dim fnt As Font
        fnt = Me.Font
        txt.Location = New Drawing.Point(txtAbcisse, txtOrdonnee)
        txt.Font = New Font(fnt.Name, 40, FontStyle.Regular)
        txt.Size = New Size(130, 37)
        txt.Multiline = True
        txt.Name = "textb" + Str((NbreEssai - 1) * 4)
        Me.Controls.Add(txt)
        txt.Text = rep
        txtOrdonnee = txtOrdonnee + 40
    End Sub
    Public Function Couleuraléatoire() As System.Drawing.Color
        Dim Alea As Integer
        Alea = Rand.Next(1, NbreCouleur)
        If Alea 1 Then Couleuraléatoire Color.Red
        If Alea 2 Then Couleuraléatoire Color.White
        If Alea 3 Then Couleuraléatoire Color.FromArgb(0, 0, 192)
        If Alea 4 Then Couleuraléatoire Color.FromArgb(255, 128, 0)
        If Alea 5 Then Couleuraléatoire Color.Yellow
        If Alea 6 Then Couleuraléatoire Color.Lime
        If Alea 7 Then Couleuraléatoire Color.Black
        If Alea 8 Then Couleuraléatoire Color.FromArgb(192, 0, 192)
    End Function
    Private Sub Btna_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnRouge.Click, BtnBlanc.Click, BtnBleu.Click, BtnOrange.Click, BtnJaune.Click, BtnVert.Click, BtnNoir.Click, BtnViolet.Click
        couleur = sender.backcolor
    End Sub
    Private Sub CouleurClick(ByVal sender As System.Object, ByVal e As System.EventArgs)
        sender.backcolor = couleur
    End Sub
    Private Sub ChoixDeLaDifficultéToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ChoixDeLaDifficultéToolStripMenuItem.Click
        Difficulté.Show()
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Close()
    End Sub
    Private Sub btnAgain_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAgain.Click
        BtnSolutiona.BackColor = Couleuraléatoire()
        BtnSolutionb.BackColor = Couleuraléatoire()
        BtnSolutionc.BackColor = Couleuraléatoire()
        BtnSolutiond.BackColor = Couleuraléatoire()
    End Sub
    Private Function VerificationCouleur()
        Dim i As Integer

        'Initialisation des tableaux
        For t = 0 To 3
            TableauJuste(t) = 0
        Next
        For t = 0 To 3
            TableauMauvais(t) = 0
        Next

        'verification couleur
        For i = 0 To 3
            If TableauProposition(i) TableauDeSolution(i) Then TableauJuste(i) 1
        Next

        For o As Integer = 0 To 3
            If TableauJuste(o) = 0 Then
                For j As Integer = 0 To 3
                    If TableauJuste(j) 0 And TableauProposition(o) TableauDeSolution(j) Then
                        TableauMauvais(j) = 2
                        Exit For
                    End If
                Next
            End If
        Next
        Dim resultat As String
        For t = 0 To 3
            If TableauJuste(t) 1 Then resultat resultat + "*"
        Next
        For t = 0 To 3
            If TableauMauvais(t) 2 Then resultat resultat + "°"
        Next
        Return resultat
    End Function


End Class


c'est le code de ma 1ere fenetre, les autre fenetre on tres peu de code.
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
Salut

expliques ce que tu veux faire
 For x = 0 To 3
    For Each ctrl As Control In Me.Controls
        If ctrl.Name = "btn" + Trim(Str(x)) + Str(((NbreEssai - 1) * 4)) Then
           TableauProposition(x) = ctrl.BackColor
                End If
        Next
  Next
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

enfaite, c'est le programme pour un mastermind, donc je dois vérifié les couleurs, c'est un moyen pour remplir mon tableau de couleur, car mes bouton sont crées dynamiquement et donc, il ne sont pas utilisable dans le code
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

auriez vous un système pour gérer la priorité des fenêtre, c'est à dire, quand je j'ouvre une nouvelle fenêtre, il ne sera impossible de revenir sur l'autre, il faut qu'elle reste en arrière plan
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
je passe en revue ton code
et pour l'instant
1 il se peut que BtnSolutiona est la meme
couleur que BtnSolutionb BtnSolutionc
donc tu devrais charger les 4 couleurs à
deviner dans une seule sub de façon que chaque
bouton à une couleur differente
et aussi mieux vaut mettre les 4 boutons
BtnSolutiona etc dans un control panel
et aussi les BtnSolutiona il ne faut pas
les cacher sinon tu devoile la solution

2 tu as écrit
If NbreCouleur = 4 Then

d'où vient le NbreCouleur ? à quoi il sert ?

3 Pourquoi declarer tout public ?
si tu veux utiliser par ex TableauProposition
dans une autre class tu declares public sinon
tu declares private
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
j'ai voulu dire

et aussi les BtnSolutiona il faut pas
les cacher sinon tu devoiles la solution
Messages postés
91
Date d'inscription
mardi 15 novembre 2011
Statut
Membre
Dernière intervention
30 avril 2020

Pour le 1 :
C'est normal que les bouton de solution peuvent avoir la meme couleur, car c'est le principe du mastermind, les couleur peuvent etre double, triplé.

Pour le 2
Sa correspond au nombre de couleur disponible, d'origine il y a 8 couleur disponible, et en mode personnalisé, l'utilisateur peut jouer sur 4 à 8 couleurs.

Pour le 3
Comme j'ai plusieurs fenêtre, sa facile la réutilisation de variable. Comme sa tout est pareil. C'est pas bon?? c'est important d'en avoir ces variable en private ou en dim?


Et pour la gestion, des fenêtre prioritaire, une idée?
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
50
pour le 1 je n'ai pas compris
selon la règle du mastermind les 4 pions à deviner sont de couleur differente
http://fr.wikipedia.org/wiki/Mastermind

pourquoi as tu besoin de plusieurs fenetre ?
ce qui est lié à
Et pour la gestion, des fenêtre prioritaire, une idée?