Changer usercontrol(index) en usercontrol(x,y)

Signaler
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
-
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
-
bonsoir à tous
j'ai créé pour mon jeu de scrable un controle nommé case constitué de deux controles label imbriqués . ce controle case à une propriété index qui s'incrémente à la création de nouvelle case.
je positionne ces cases pour former une grille de 15 sur 15.
j'aurais aimé reconnaitre ces cases par leur coordonnées X et Y plutot que par l'index.
donc avoir case(X,Y) plutot que case(index).
je pense savoir attribuer une property let et get avec le code suivant

Dim CaseLigne As Byte

Public Property Let Ligne(ByVal NewLigne As Byte)
CaseLigne = NewLigne
End Property

Public Property Get Ligne() As Byte
Ligne = CaseLigne
End Property

mais j'aurais une valeur case(index).X
et case(index).Y
mais pas case(X,Y)

comment faire

8 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
107
je vois pas trop en quoi ca te dérange, mais bon (surtout que c'est bien plus pratique à utiliser!).

Tu peux toujours faire une fonction qui prend en argument ton X et Y passé par référence, et les modifiers pour renvoyer ce que tu veux.
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
zsalut,

t'as sût faire pour une Ligne et une Colonne indépendement, autant faire une pierre deux coups :

Public Type MyCoord
    Dim MyLigne As Byte
    Dm MyColonne As Byte
End Type

Dim ActualCoord As MyCoord

Public Property Let Coord(ByVal NewCoord As MyCoord)
    ActualCoord.MyColonne  = NewCoord.MyColonne
    ActualCoord.MyLigne = NewCoord.MyLigne
End Property

Public Property Get Coord() As MyCoord
    Coord.MyColonne = ActualCoord.MyColonne
    Coord.MyLigne = ActualCoord.MyLigne
End Property

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
Bonsoir
ça ne me dérange pas trop
j'obtien ainsi directement quelle ligne et quelle colonne il possède, il est plus rapide et facile de savoir si je suis en fin de ligne ou de colonne.
aussi je voulais savoir ça pour ma culture.
merci Mortalino j'ai bien pensé aussi de jouer avec le couple de coordonnée
Je ne vois pas comment Faire pour appeler une case sans l'appeler par son index : case(index).toutCeQuonveut.
je ne peux pas changer de case en simplement changeant son X je dois chercher son index et après j'aurais son X, mais là il ne me servira plus à rien.
mais j'ai toujours la référence à l'index :case(index).(x,y)
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
excusez moi mauvais ordre dans la réponse

Bonsoir
ça ne me dérange pas trop
j'obtien ainsi directement quelle ligne et quelle colonne il possède, il est plus rapide et facile de savoir si je suis en fin de ligne ou de colonne.
aussi je voulais savoir ça pour ma culture.
Je ne vois pas comment Faire pour appeler une case sans l'appeler par son index : case(index).toutCeQuonveut.
je ne peux pas changer de case en simplement changeant son X je dois chercher son index et après j'aurais son X, mais là il ne me servira plus à rien.

merci Mortalino j'ai bien pensé aussi de jouer avec le couple de coordonnée
mais j'ai toujours la référence à l'index :case(index).(x,y)
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
pour moi dans
case(index).(x,y)

ton index est inutile. x et y font office d'index, ce que toi tu mets c'est comme si tu avais plusieurs plateaux de ton jeu.

C'est comme aux échecs ou dames, une coordonnée, c'est une coordonnée.
B5, c'est toujours à la meme place, donc l'index que toi tu rajoutes je ne vois pas ce qu'il t'apporte

case(1).(1, 1)
case(2).(1, 1)
case(3).(1, 1)    ??  tu vois ce que je veux dire ?

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA
Messages postés
176
Date d'inscription
mercredi 7 avril 2004
Statut
Membre
Dernière intervention
1 avril 2013
1
bonjour mortalino

je viens de recopier ton code dans mon prog et bizarrement le complément automatique de code de VB ne fonctionnait plus , après avoir inhibé cette ligne de code
'Public Property Set Coord(ByVal NewCoord As MyCoord)
' ActualCoord.MyColonne = NewCoord.MyColonne
' ActualCoord.MyLigne = NewCoord.MyLigne
'End Property
le complément automatique refonctionne correctement, Bizarre non!!! donc je n'ai pas pu tester ton code, mais je pense que lorsqu'on cré un controle comme un label il y a toujours un index qui est attribué d'office

je essairais plus tard dans un notre prog

encore merci
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
Salut
"Case" est un mot clé de VB, pas la peine de chercher plus loin.
Pour ce qui est de "Coord", je ne pense pas que ce soit un mot clé, mais il est possible qu'une variable ait été dimensionnée quelquepart dans le code avec ce même nom = conflit. A vérifier.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés


<hr />
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Pis son Index, est calculable par rapport aux coordonnées :

Index = Col + (15 * (Ligne - 1)) - 1

(si ton Label part bien de 0)

@++

<hr size="2" width="100%" />( Nouveau forum : Exclusivement Office & VBA