Changer de focus via les flêches de direction [Résolu]

Messages postés
14
Date d'inscription
lundi 13 août 2007
Statut
Membre
Dernière intervention
13 décembre 2011
- - Dernière réponse : ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 13 déc. 2011 à 16:18
Bonjour,

Ca fait des journée entière que je planche sur le problème mais impossible de le résoudre par mes propres conaissance en VB:


Je dois créer un résolveur de sudoku. Jusque la tout va bien^^
Une de mes étapes est la sélection possible d'une case via l'utilisation des Fleches.

La génération de mes cases et automatique et l'index des case commence de 1 a 81.

Sur mon formulaire j'ai donc :



81 textbox alignés comme une grille de sudoku
4 Bp sur lesquelles les fleches changent bien le focus
Une autre textbox vérouillé
et une combobox .

Voila donc j'aimerais pouvoir me déplacer dans la grille avec mes fleches sachant que mes index sont rangé par ligne


1-2-3-4-5-6-7-8-9
10-11-12-13-14-15-16-17-18
etc...
73-74-75-76-77-78-79-80-81



L'appui sur la fleche Up entrainerai donc une diminution de mon index de 9 et quand ca passe inférieur a la première ligne, retour a la dernière ligne.

L'appui sur la fleche Down entrainerai donc une augmentation de mon index de 9 et quand ca passe suppérieur la dernière ligne, retour a la première ligne.

L'appui sur la fleche Left entrainerai donc une diminution de mon index de 1 et quand ca passe inférieur a la première colonne, retour a la dernière colonne.

L'appui sur la fleche Right entrainerai donc une augmentation de mon index de 1 et quand ca passe suppérieur a la dernière colonne, retour a la première colonne.


En gros, le focus changé avec les fleches ne doit me permettre uniquement de changer de case mais pas d'aller sur mes BP ( la tab est la pour ca)

Des idées ? Car la je m'arraches les cheveux devant les milliers de "solutions" que j'ai cru avoir trouvé mais en vain ....
Afficher la suite 

14/34 réponses

Messages postés
14
Date d'inscription
lundi 13 août 2007
Statut
Membre
Dernière intervention
13 décembre 2011
0
Merci
ucfoutu, tu sais quand t'étais pas la ca nous arrangeait ;)
Je ne suis pas informaticien, ma passion c'est surment pas de coder. Ca fait partie de mes cours, je SUBIT.

Tes remarques ne servent a rien a part énerver les gens. Merci d'arreter ton flood inutile.

HeJoe, mon principale probleme n'est pas ca, mais tu as répondu a une de mes interrogation effectivement. C'est top!!! merci !
Commenter la réponse de renab
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
2
0
Merci
renab,

Faudrait peut être que tu ne fasses pas perdre du temps inutile à tout le monde en posant des questions stupides !

Le titre de ta question est :


Changer de focus via les flêches de direction


Ensuite tu explique comment tu navigues avec tes flèches, ce qui veut dire que n'a pas de question, puisque tu décris ce qu'il faut faire pour résoudre ta question.

In fine tu résumes :


Des idées ? Car la je m'arraches les cheveux devant les milliers de "solutions" que j'ai cru avoir trouvé mais en vain ....


C'est quoi le problème, ta question (bis) et de déplacer le focus avec les flèche, ensuite tu dis comment il faut faire, puis tu le fais dans ton code, alors c'est résolu, tu veux quoi encore ?

Totalement incohérent !

Joe.
Commenter la réponse de ehjoe
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Je dirais que cela commence vraiment à bien faire !
Tu "subis" ? Attends ! nous n'avons pas l'intention, ici, de subir celui qui subit, hein !
Alors (ou n'en parle plus) :
Nous avons besoin de savoir ;
- Si oui ou non tu développes sous VB6 qui n'est pas VBA
- si oui : si tes textbox sont oui ou non dans un groupe de contrôles indexés et si oui : comment tu l'as créé, que ce soit via l'IDE ou dynamiquement
Tout le reste est pure perte de temps.
quant à :
Je ne suis pas informaticien, ma passion c'est surment pas de coder. Ca fait partie de mes cours, je SUBIT.

Cela se passe de commentaires autres que celui-ci : si tu es vraiment dans ce cas et dans cet état d'esprit ===>> change de direction immédiatement.
Ce forum n'est certes pas là pour permettre à ceux qui n'ont rien à cirer du développement informatique de "donner le change" à d'autres, à commencer par leurs enseignants.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
14
Date d'inscription
lundi 13 août 2007
Statut
Membre
Dernière intervention
13 décembre 2011
0
Merci
HeJoe, il me semble avoir été clair. Si ce n'est pas le cas désolé.
Je n'arrives pas a passé d'une textbox a une autre via les fléches. C'est mon problème.
Après le code que tu as proposé me permettra effectivement que mon focus reste dans mes textbox en permanence sauf en cas de clic souris, ce que j'aurais eut à faire après! Donc tu me donne déja une bonne piste pour la suite.

ucfoutu : VB6, Textbox créées via un code de génération donc dynamiquement.
Commenter la réponse de renab
Messages postés
14
Date d'inscription
lundi 13 août 2007
Statut
Membre
Dernière intervention
13 décembre 2011
0
Merci
Private Sub box_KeyDown(Byval Index as integer, ByVal KeyCode As Integer, ByVal Shift As Integer)


Cette fonction marche. Cependant mon code entraine une erreur derrière:


Me.box.index=i

If KeyCode = 39 Then box(i+1).SetFocus 'suivant
If KeyCode = 37 Then box(i-1).SetFocus 'précédent
If KeyCode = 38 Then box(i-9).SetFocus 'hauts
If KeyCode = 39 Then box(i+9).SetFocus 'bas



erreure: " Index du groupe de controle incorrect". C'est a dire ?
Commenter la réponse de renab
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
comment tu l'as créé, que ce soit via l'IDE ou dynamiquemen
t
et voilà ta réponse !
ucfoutu : VB6, Textbox créées via un code de génération donc dynamiquement

Il faudrait quoi, pour qu'on le voie, ce code de création, après tant de messages ? Qu'on se mette à genoux, sans doute ?
Tu le montres, ce code de création, oui ?
Et une autre fois : (déjà dit plus haut) même pas besoin d'une variable i, si textboxes indexées !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Et si tu as besoin d'explications sur le paramétrage de la mise en forme ===>>
LE VOILA, LE SOURCE EN CAUSE. Il te suffira d'y lire les lignes commentées.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
14
Date d'inscription
lundi 13 août 2007
Statut
Membre
Dernière intervention
13 décembre 2011
0
Merci
Héhéhé, je savais bien qu'au fond tu ne demandais qu'a m'aider. Mais a vrai dire, ta solution toute faites, bien que surement parfaitement réalisé et propre ne me correspond probablement pas ( je vais la lancer quand même ne te fache pas) Mais j'arrives a la fin de mon projet. Naviguer via mes fleches est disons, un plus ergonomique.

J'aimerais avant toute chose comprendre mon code. Le mien comme tu as du le comprendre est imparfait, voir très bricollé. Mais les fonctions jusqu'ici marchent, assurent leur role et surtout, je peux les expliquer ( choses que j'aurais a faire a l'oral en janvier)...


Donc même si ce n'est que des pistes d'aides j'ai vraiment besoin de rester sur le travail que j'ai fait ( même si toi tu vas appeller ca du ni'mporte quoi).

Voila mon code de génération des textbox:

Private Sub Form_Load()

Dim i As Integer
Dim l As Integer
Dim z As Integer
Dim top0 As Integer

Me.Height = 8850
Me.Width = 10950
z = 9
Me.box(0).Visible = False
top0 = 500


For l = 1 To 9
For i = 1 To 9
Load Me.box((i + l * z) - 9)
box((i + l * z) - 9).Top = top0
box((i + l * z) - 9).Left = box(0).Left + i * box(0).Width
box((i + l * z) - 9).Width = box(0).Width
box((i + l * z) - 9).Visible = True
Next

top0 = top0 + box(0).Width

Next
Me.aide.Text = " Saisissez votre grille puis validez."
Me.bpverif.Enabled = False
Me.sauvegarder.Enabled = False
End Sub
Commenter la réponse de renab
Messages postés
14
Date d'inscription
lundi 13 août 2007
Statut
Membre
Dernière intervention
13 décembre 2011
0
Merci
Alors j'ai testé ton code. Effectivement, C'est de l'art. mais je restes quand même préférable a ma solution ( test et dis moi ce que tu en penses^^)

Par contre tu m'a quand même donner la partie que j'attendais en ce qui concerne le changement de focus. Donc un grand merci, j'ai plus qu'a travailler dessus et décortiquer pour comprendre ;)

Désolé d'avoir été aussi désagréable, mais bon, t'y es pas allé de main morte non plus.
Commenter la réponse de renab
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
2
0
Merci
Bonjour renab,

Tu racontes :


Private Sub Form_Load()
Dim i As Integer
Dim l As Integer
Dim z As Integer
Dim top0 As Integer
Me.Height = 8850
Me.Width = 10950
z = 9
Me.box(0).Visible = False
top0 = 500
For l = 1 To 9
For i = 1 To 9
Load Me.box((i + l * z) - 9)
box((i + l * z) - 9).Top = top0
box((i + l * z) - 9).Left = box(0).Left + i * box(0).Width
box((i + l * z) - 9).Width = box(0).Width
box((i + l * z) - 9).Visible = True
Next
top0 = top0 + box(0).Width
Next
Me.aide.Text = " Saisissez votre grille puis validez."
Me.bpverif.Enabled = False
Me.sauvegarder.Enabled = False
End Sub



J'ai fait une source que j'ai déposé, elle crée et gère avec les flèches un pavé de 9 x 9 textBox, toutefois, en préambule :

- Le mieux est de demander avant de recopier des sources car la déclaration dynamique, outre qu'elle complique les choses quand elle s'insère entre des objets physique (modification des index de tabulation), elle est plus compliquée à créer, ce n'est pas difficile de copier 81 textBox à l'écran, et c'est plus rapide pour corriger la mise en place visuelle !


- Tu parasites ton code avec plein de données qui peuvent entrer directement dans les propriétés?
Voici ce qu'il y a en trop :


Private
Me.Height = 8850
Me.Width = 10950
z = 9
Me.box(0).Visible = False
Me.aide.Text = " Saisissez votre grille puis validez."
Me.bpverif.Enabled = False
Me.sauvegarder.Enabled = False
Me.



- Si tu dois transmettre ton code, évite de donner des noms d'oiseaux aux objets, ça oblige celui qui le retranscrit, à lui aussi donner tes noms d'oiseaux, ce qui est pénible.


- En vrac :

-- Eviter d'utiliser une variable l minuscule car on la confond trop avec le chiffre 1, d'autant qu'après i c'est j normalement...

-- Mettre le nom de la variable après le Next d'une boucle, sinon, si le code dépasse la hauteur de l'écran on ne sait plus a quelle variable appartient le Next.

-- Ton textBox d'affichage du message, s'il affiche seulement on utilise un Label.


Voici le code qui gère la création logique et la gestion avec les flèches :

Sub Form_Load()
  Dim i As Byte
  Dim x As Integer
  Dim y As Integer
  x = 0
  y = 10
  For i = 1 To 81
    Load Text1(i)
    Text1(i).Left = (Text1(0).Width * x) + 5
    Text1(i).Top = y
    Text1(i) = Format(i, "00")
    Text1(i).Visible = True
    x = x + 1
    If x = 9 Then
      x = 0
      y = y + Text1(0).Height
    End If
  Next i
End Sub

Sub Form_Activate(): Text1(1).SetFocus: End Sub

Sub text1_KeyDown(Index As Integer, KeyCode As Integer, Shift As Integer)
  Select Case KeyCode
    Case 37 ' left
      Select Case Index
        Case 1, 10, 19, 28, 37, 46, 55, 64, 73: Text1(Index + 8).SetFocus
        Case Else: Text1(Index - 1).SetFocus
      End Select
    Case 38 ' up
      If Index < 10 Then Text1(Index + 72).SetFocus
      If Index > 9 Then Text1(Index - 9).SetFocus
    Case 39 ' right
      If Index Mod 9 = 0 Then Text1(Index - 8).SetFocus
      If Index Mod 9 <> 0 Then Text1(Index + 1).SetFocus
    Case 40 ' down
      If Index < 73 Then Text1(Index + 9).SetFocus
      If Index > 72 Then Text1(Index - 72).SetFocus
  End Select
End Sub



Le programme en entier, il n'y a plus qu'à le lancer, est ici avec ses sources:


http://www.vbfrance.com/codes/DEPLACEMENT-AVEC-FLECHES-DANS-PAVE-TEXTBOX-9X9-DYNAMIQUE_53860.aspx


Cordialement, Joe.
Commenter la réponse de ehjoe
Messages postés
728
Date d'inscription
samedi 4 avril 2009
Statut
Membre
Dernière intervention
30 mars 2014
2
0
Merci
Suite,

Ah, voici en hyperlien :

Clique ICI

j.
Commenter la réponse de ehjoe
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Tu aurais montré ton code dès le début, que tu n'en serais pas là (et nous avec) à la troisième page, juste pour une broutille de cour maternelle
Je n'y suis pas allé de main morte ? Et d'après toi : pourquoi ? (réponse : en constatant comment tu "fonctionnes", en copiant un peu ici et un peu là, sans même distinguer un langage de l'autre)
Tu veux savoir ce que je pense de ton code ? c'est ça ? Alors je vais te répondre, sans même avoir besoin de le tester (juste en lisant) : exactement la même chose que ce que pensera un utilisateur dont la résolution de l'écran sera différente de la tienne.
quant à ;
et surtout, je peux les expliquer ( choses que j'aurais a faire a l'oral en janvier)...

Sans commentaires (tu vas vite découvrir comment les choses se passent ... )
Allez, je sors de cette discussion !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
14
Date d'inscription
lundi 13 août 2007
Statut
Membre
Dernière intervention
13 décembre 2011
0
Merci
Non, le code de génération je l'ai fait par MOI MÊME . Il ne sort que de mes feuilles de papier! Comme beaucoup dans mon logiciel. Cette fonction je ne comprenais vraiment rien j'étais aller chercher sur internet ce que je pouvais trouver, rien d'autre.

Merci de vos aides, la solution est trouvée.

Merci
Commenter la réponse de renab
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Alors : si c'est résolu ===>> tag "réponse acceptée"
Et bonne chance.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu