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