IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[Mastermind] (encore et toujours) Fonction récalcitrante


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Par défaut [Mastermind] (encore et toujours) Fonction récalcitrante
    bonjour à tous.
    Je m'excuse de n'être qu'un opportuniste de plus parmi la masse qui viennent quémander votre aide et s'enfuient comme des voleurs, mais si une âme charitable pouvait m'aidait, je lui en serais infiniment reconnaissant. Car il ne me reste qu'une journée pour finir un Mastermind diabolique qui me nargue depuis deux semaines, faute de quoi je n'aurai pas les crédits de ma matière...

    Je vous expose donc mon problème :

    Je cherche à créer une fonction nommée check() qui me permettra dans un premier temps de placer les couleurs que j'ai choisies dans les cases prévues à cet effet.
    Deux tableaux dynamiques imbriqués constituent les lignes et les cases dans lesquelles les couleurs doivent s'insérer. Et la ligne qui contient mes 5 couleurs est elle aussi un tableau à une dimension. Voici le code de ces tableaux (qui sont sur deux formes différentes, l'un dépendant du niveau et étant créé par une fonction de la classe, l'autre étant statique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    'Les deux tableaux dynamiques imbriqués (sur la classe). x détermine le nombre de lignes. 
        Dim i, y
        Public group(i) As GroupBox
        Public tent(y) As PictureBox
     
    Public Sub tentative(ByVal x)
            For Me.i = 0 To (x - 1)
                ReDim Preserve group(i)
                group(i) = New GroupBox
                group(i).Width = 220
                group(i).Height = 45
                group(i).Top = 575 - (48 * (i + 1))
                group(i).Left = 170
                group(i).Parent = play
                group(i).BackColor = Color.Transparent
                For Me.y = 0 To 4
                    ReDim Preserve tent(y)
                    tent(y) = New PictureBox
                    tent(y).Width = 25
                    tent(y).Height = 25
                    tent(y).Top = 13
                    tent(y).Left = 30 * y + 37
                    tent(y).Parent = group(i)
                    tent(y).BackColor = Color.Transparent
                    tent(y).BorderStyle = BorderStyle.FixedSingle
                Next
            Next
        End Sub
     
    'Et l'autre tableau (sur la form play.vb) :
        Public couleur() As PictureBox
    For y = 0 To 4
                ReDim Preserve couleur(y)
                couleur(y) = New PictureBox
                couleur(y).Width = 40
                couleur(y).Height = 40
                couleur(y).Top = 16
                couleur(y).Left = 19 + 46 * y
                couleur(y).Parent = Me.ordre
                couleur(y).BackColor = Color.Transparent
                couleur(y).BorderStyle = BorderStyle.FixedSingle
            Next
    la fonction que j'essaye de créer vérifierai d'abord si la première case de la première ligne est transparente, si oui, elle remplit la ligne, sinon, elle passe à la ligne suivante. mais impossible de traduire ça correctement, je ne sais pas comment faire !
    Voilà ce que j'ai testé (je sais que c'est n'importe quoi, mais ça vous montrera un peu ce que j'essaye de faire) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Public Sub check()
    For i = 0 To 9    
        For y = 0 To 4
            If group(i).tent(y).BackColor = Color.Transparent Then ''''''Apparemment impossible de faire de group un parent de tent comme ça, ya-t-il un autre moyen de procéder ?
                tent(y).BackColor = play.couleur(y).BackColor
            End If
        Next
    Next
     
        End Sub
    Voilà, je planche sur ce problème depuis hier et désespère de trouver une solution. Je vous remercie par avance de votre aide,
    Cordialement,
    Nesego.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ta façon d'initialiser les tableaux n'est pas bonne... pourquoi faire des redim preserve à chaque fois alors que tu connais à l'avance la taille du tableau ? En plus avec ta méthode tu ne garde les références que de la dernière ligne ajoutée...
    Il faudrait que tent soit un tableau à 2 dimensions, ou mieux, une liste de lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
        Dim tent as New List(Of PictureBox())
     
    ...
     
                dim ligne(4) as PictureBox
                For Me.y = 0 To 4
                    ligne(y) = New PictureBox
                    ligne(y).Width = 25
                    ligne(y).Height = 25
                    ligne(y).Top = 13
                    ligne(y).Left = 30 * y + 37
                    ligne(y).Parent = group(i)
                    ligne(y).BackColor = Color.Transparent
                    tent(y).BorderStyle = BorderStyle.FixedSingle
                Next
                tent.Add(ligne)
    Ensuite, pour accéder à une picturebox, tu n'as pas besoin de passer par la groupbox, puisque tu as directement des références vers les picturebox dans tent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For i = 0 To 9
        For y = 0 To 4
            If tent(i)(4).BackColor = Color.Transparent Then
                tent(i)(4).BackColor = play.couleur(y).BackColor
            End If
        Next
    Next

  3. #3
    Membre éclairé Avatar de Elwe31
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 487
    Par défaut
    Si je comprends bien
    un groupbox contient des tent ???

    et dans ton code je ne vois pas le lien entre un groubox et les tents....

    J'aurai plutot fais un class groupBox avec un flag pour savoir s'il y a des elements ou pas !
    Et creer un tableau contenant tous les groupbox...

  4. #4
    Nouveau candidat au Club
    Inscrit en
    Mai 2008
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 2
    Par défaut
    Merci Tomlev pour cette réponse détaillée. j'ai testé le tableau à liste, et effectivement, ça me paraît plus... "propre".
    Mais la fontion ne donne toujours rien. Lorsque je la lance sur le programme de debuggage, il crashe et j'ai droit à l'erreur que tu peux voir sur le screen à cette adresse : http://img76.imageshack.us/img76/5910/image2qp5.png
    Il est question de collection, je sais vaguement ce que c'est, est-ce que je dois en créer une pour que ça fonctionne correctement ? En tous les cas, merci, au moins j'ai un peu progressé.

    Elwe31>Je n'ai pas compris grand chose à ce que tu m'as dit. Je débute en VB et on nous as balancé ce projet à faire en deux semaines alors qu'on ne connaissait pas une ligne de VB... ><


    PS : Très bien ça l'avatar de Marvin . Je suis personnellement membre fondateur du "fan club" si j'ose dire de H2G2 . Alors, forcément, j'approuve :p

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    A priori tu essaies d'accéder à un élément en dehors des limites de la liste. Par exemple, s'il n'y a pas encore 5 lignes dans la liste et que tu essaies d'accéder à la 6e...
    Au lieu de For i = 0 To 9, essaie For i = 0 To tent.Length - 1

Discussions similaires

  1. [MySQL] Encore et toujours un pb avec include en fonction de la langue du nav !
    Par naivenu dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 15/06/2008, 23h37
  2. Clic droit encore et toujours
    Par Stéphane Olivier BERNARD dans le forum Access
    Réponses: 3
    Dernier message: 22/05/2006, 00h26
  3. IE/Firefox... encore et toujours...
    Par maniaco_jazz dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 19/02/2006, 23h17
  4. nodes, child et compatibilité... encore et toujours
    Par pmithrandir dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 28/04/2005, 14h26
  5. stencil buffer, encore et toujours
    Par JAimeBienCoderBourre dans le forum OpenGL
    Réponses: 4
    Dernier message: 08/04/2005, 11h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo