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 :

Comment faire coréler des objets indexé et des picturebox par une boucle de test en lecture de tableaux.


Sujet :

VB.NET

  1. #1
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut Comment faire coréler des objets indexé et des picturebox par une boucle de test en lecture de tableaux.
    Bonjour

    Dans le code suivant
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
     
    Option Explicit On '
    Imports System.IO
    Imports System.Text
    Imports System.Threading
     
    Public Class Form1
     Public TagStart As Object
        Public PicZ(120) As PictureBox
     
        Dim MouseIsDown As Boolean = False
        Dim CursorImage As Image
        Dim mm, nn, nnn As Integer
        Dim IndexTag As Integer
        Dim numberSeq() As Integer = {11, 13, 15, 17, 22, 24, 26, 28, 31, 33, 35, 37, 42, 44, 46, 48, 51, 53, 55, 57, 62, 64, 66, 68, 71, 73, 75, 77, 82, 84, 86, 88}
        Dim numberBSeq() As Integer = {12, 14, 16, 18, 21, 23, 25, 27, 32, 34, 36, 38, 41, 43, 45, 47, 52, 54, 56, 58, 61, 63, 65, 67, 72, 74, 76, 78, 81, 83, 85, 87}
     
        Dim pictSeq() As PictureBox = {PictureBox1, PictureBox2, PictureBox3}
        Dim picZSeq() As Object = {PicZ(18), PicZ(28), PicZ(38)}
     
        Dim Pieces, Ligne(100), ggg, PieceEch
        Dim Nom, Numero, Revue, Prix As String
        Dim PosX, PosY As String
        Dim PosXE, PosYE As Integer
        Dim DoubleClickBoolean = False
     
        Public Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     
            Call CrééCadre()
     
            Me.KeyPreview = True
     
            'créer le tableau de conversion des PictureBox en objets indexé.
     
     
            PicZ(18) = PictureBox1
            PicZ(28) = PictureBox2
            PicZ(38) = PictureBox3
            PicZ(48) = PictureBox4
     
    ' ..............
     
            PicZ(61) = PictureBox62
            PicZ(71) = PictureBox63
            PicZ(81) = PictureBox64
     
            'affecte la propriété AllowDrop aux 64 cases
            For mm = 0 To 7
                For Me.IndexTag = 11 + 10 * mm To 18 + 10 * mm
                    PicZ(IndexTag).AllowDrop = True
                Next Me.IndexTag
            Next mm
     
            'initialise les 64 cases Echiquier comme : Vide
     
            For nn = 10 To 17
                Ligne(nn) = "........"
            Next nn
     
        End Sub
     
      Public Sub PoseEffacePièces(sender As System.Object)
     
            Dim clicked As PictureBox = CType(sender, PictureBox)
            Tag = sender.tag
     
            'Pièces cases noires 
            For Each number As Integer In numberSeq
                If Tag = number Then PlacePiecesCasesNoires(1)
            Next
     
            'Pièces sur cases blanches
            For Each number As Integer In numberBSeq
                If Tag = number Then PlacePiecesCasesBlanches(1)
            Next
     
            'Ecriture des lignes 10 à 17 de matrice de problèmes au format des fichiers *.ech
            For IndexFileEch = 10 To 17
                Ligne(99) = ""
                nnn = 0
                For mm = 28 - IndexFileEch To 105 - IndexFileEch Step 10
                    nnn = Int(mm / 10)
                    ggg = Mid(Ligne(IndexFileEch), nnn, 1)
     
                    If Tag = mm Then
     
                        If Mid(Pieces, 2, 1) = "B" Then PieceEch = Mid(Pieces, 1, 1) : Call LoopControls()
                        If Mid(Pieces, 2, 1) = "N" Then PieceEch = LCase(Mid(Pieces, 1, 1)) : Call LoopControls()
     
                        'test effacecemnt pièces par DoubleClick
                        If DoubleClickBoolean = True Then
                            'Initialise le contenu de la case à : vide
                            PieceEch = "."
                            'dblclick sur cases noires
                            For Each number As Integer In numberSeq
                                If Tag = number Then PicZ(Tag).Image = My.Resources.CaseNoire
                            Next
                            'dblclick sur cases blanches
                            For Each number As Integer In numberBSeq
                                If Tag = number Then PicZ(Tag).Image = My.Resources.CaseBlanche
                            Next
                        End If
                        'ajoute nouvelle pièce à la suite (position du problème dans fichier ech)
                        Ligne(99) = Ligne(99) + PieceEch
                        'si pièce non changé garde l'original de la position du fichier ech
                    ElseIf Tag <> mm Then
                        Ligne(99) = Ligne(99) + ggg
                    End If
     
                Next mm
                Ligne(IndexFileEch) = Ligne(99)
            Next IndexFileEch
     
               End Sub
    Je voudrais ne pas écrire 64 lignes comme ceci (!) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
            'créer le tableau de conversion des PictureBox en objets indexé.
     
     
            PicZ(18) = PictureBox1
            PicZ(28) = PictureBox2
            PicZ(38) = PictureBox3
            PicZ(48) = PictureBox4
     
    ' ..............
     
            PicZ(61) = PictureBox62
            PicZ(71) = PictureBox63
            PicZ(81) = PictureBox64
    mais les remplacer par deux tableaux séquentiels déclarés comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Dim pictSeq() As PictureBox = {PictureBox1, PictureBox2, PictureBox3, ...}
        Dim picZSeq() As Object = {PicZ(18), PicZ(28), PicZ(38), ....}
    Seul bémol je ne trouve pas le moyen d'écrire le code de la boucle pour faire les correspondances ad'hoc comme je l'ai fait pour les tableau séquentiel
    avec des Integer => Tableau utilisé dans la routine donné en exemple : Public Sub PoseEffacePièces(sender As System.Object)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      For Each number As Integer In numberSeq
                If Tag = number Then PlacePiecesCasesNoires(1)
            Next
    En clair on ne peut pas indexer des picturebox donc la solution est de faire une équivalence avec des objets indexés.

    Avez-vous une idée pour écrire cette boucle ?

    En vous remerciant par avance.

    A vous lire
    La Connaissance est comme le rire elle est contagieuse en la partageant!

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je ne vois pas comment tu peut t'y retrouvé avec tes index.

    Chaque tableau est indexée de 0 à l'infini et tu réindexe un autre tableau avec de éléments du premier tableau!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim picZSeq() As as integer = {18, 28, 38, ....}
    For i as integer= 0 to  picZSeq.count -1
           PicZ(picZSeq(i)).???=?????
    Next

  3. #3
    Membre habitué Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    305
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 305
    Points : 181
    Points
    181
    Par défaut
    Bonjour

    En fait je m'y retrouve très bien car ces index ne sont pas la par hasard ils correspondent au numéros des cases d'un échiquier selon la norme de la FIDE. Tant qu'à faire : coup double ! C'est un détail résolu pour moi.

    Ta routine est juste ce que je pense mais après quid avec des noms non indexé? A moins qu'il faille les traiter comme des chaines de caractères puis les réaffecter comme non de picturebox?

    Mais la j'avoue HELP je suis perdu ! Je ne sais pas faire.

    S'il y a une solution je suis preneur d'un exemple testé pour comprendre :

    Merci
    La Connaissance est comme le rire elle est contagieuse en la partageant!

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/11/2008, 01h22
  2. Réponses: 5
    Dernier message: 29/08/2008, 11h42
  3. Réponses: 1
    Dernier message: 08/07/2007, 15h32

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