TextBox

Résolu
rebelette Messages postés 63 Date d'inscription lundi 19 octobre 2009 Statut Membre Dernière intervention 5 janvier 2011 - 13 févr. 2010 à 21:03
rebelette Messages postés 63 Date d'inscription lundi 19 octobre 2009 Statut Membre Dernière intervention 5 janvier 2011 - 14 févr. 2010 à 22:43
Bonjour. Je vais essayer de poser mon problème le + simplement possible. J'ai une rangée de TextBox qui appartiennent à un Groupe de Contrôles. Grâce à un CommandButton et une Variable statique dans une Boucle, je passe de l'un à l'autre sans problème pour changer successivement la valeur de chaque TextBox. Mon problème est que je ne dois pas changer les valeurs à tous les Contrôles. Voilà comment je procède quand j'arrive sur un TextBox:
TextBox = ""
TextBox.setFocus
Existe-t-il une Propriété qui permet d'arriver sur un TextBox avec ces 2 possibilités:
1: je ne dois pas changer de valeur et un Click sur le CommandButton m'envoie sur le TextBox suivant (en conservant la valeur de celui que je viens de quitter).
2: je dois changer de valeur, et en entrant cette valeur, celle déja en place disparait et le Focus me permet d'en inscrire une nouvelle sans toucher la souris.
J'espère ne pas vous embrouiller avec toutes ces explications. Merci à ceux qui auront le courage de lire.

8 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
13 févr. 2010 à 21:20
Bonjour,

je n'ai pas réellement compris tes explications de ton mpécanisme ...
Si je comprends un peu, tu as créé sous VB6 (car tu développes bien sous VB6, n'est-ce-pas ?) un groupe de contrôles indexés... Disons que ce groupe se nomme Text1 et qu'il comprend conc des textboxes indexées Text1(0), Text1(1), Text1(2) , etc....
Tu as donc, pour ce groupe, un seul évènement commun pour chaque évènement... la seule différence étant l'index du contrôle (un paramètre qui figure parmi ceux de l'évènement)
La propriété ActiceContrôle te permet de connaître (ActiveControl.index) l'index de celui sur lequel tu es. Dans un tel cas :
Text1(activecontrol.index + 1). setfocus donne le focus à l'index suivant.
kifkif pour toutes les propriétés ...
Voilà le principe de base...
Reste (déjà dit) que tes explications sur ce que tu veux faire sont imprécises.
Maintenant que tu connais ce principe de base (valable uniquement sous VB6), montre-nous un début de code commenté l'utilisant. Ces commentaires nous permettront de cerner ce que tu veux atteindre.

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 févr. 2010 à 09:27
Bien embrouillée, ton affaire !
Le beurre et l'argent du beurre ne pouvant être présents que dans des paniers différents, tu as le choix entre :
2 boutons de commande (un pour remettre à "" et l'autre non)
ou
utiliser deux évènements différents du même bouton de commande : évènement click pour un cas (effacer) et dblclick pour l'autre (ne pas effacer)
ou encore
n'utiliser qu'un seul bouton de commande, mais avec les évènements Keyup (pour utilisation clavier) et MouseUp (pour utilisation souris), en :
pour souris : distinguant le bouton utilisé
pour clavier : en distinguant le paramètre Shift
Voilà !

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 févr. 2010 à 09:37
et bien évuidemment :
Au lieu d'utiliser une variable static dans l'évènement ====>> ne pas l'y mettre et la remplacer par une variable générale (Private i as integer tout en haut de ton module, avant toute procédure).


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
14 févr. 2010 à 11:56
Ceci étant dit, tu te casses beaucoup la tête pour bien peu...
Voici ce que je ferais :
Private Sub Command1_Click()
  Static i As Integer
  Text1(i).SelStart = 0
  Text1(i).SelLength = Len(Text1(i).Text)
  Text1(i).SetFocus
  i = i + 1
End Sub 

En atteignant ma textbox, tout son contenu sera de cette manière sélectionné et alors :
- soit on frappe du texte et il remplace la sélection
- soit on clique à la suite et il : laisse la sélection telle qu'elle était, mais désélectionne et on peut frapper là où l'on a cliqué...
- soit on utilise une touche directionnelle (et on se retrouve selon la touche, soit devant la sélection (désélectionnée) soit derrière (désélectionnée également)=

Tout celà me parait plus ergonomique et plus intuitif
tu peux même aller plus loin (relever le texte avant l'intervention de l'utilisateur). Si celui-ci fait une fausse mamoeuvre et veut revenir en arrière : lui permettre de le faire avec un double-click, par exemple, en restituant le texte originel
Genre :
en décmlaration générale (tout en haut sur ton module :

private toto as string

Au got focus de ta textbox :
 toto = Text1(index).text


au double click sur la textbox :
text1(index).text = toto

Imaginons que te texte "bonjour" s'y trouvait
l'utilisateur arrive dans la textbox avec le mot "bonjour" sélectionné. Il frappe intempestivement "a" ===>> "bonjour" est écrasé ... il se repent ===>> il double-clique ===>> "bonjour" se réécrit alors à la place de "a".
Voilà ...
Tu as tout entre tes mùains pour faire quelque-chose de plus convivial.
A toi de jouer comme tu l'entends !
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rebelette Messages postés 63 Date d'inscription lundi 19 octobre 2009 Statut Membre Dernière intervention 5 janvier 2011
13 févr. 2010 à 23:36
J'étais pris par une Boucle, j'ai pas vu le temps passer. Bien reçu votre réponse, vous réponds dès demain, mais là, vais me coucher...
0
rebelette Messages postés 63 Date d'inscription lundi 19 octobre 2009 Statut Membre Dernière intervention 5 janvier 2011
14 févr. 2010 à 09:17
Pour déplacer le Focus de TextBox à TextBox, je n'ai pas de problème. Voilà la partie de code qui correspond à ce problème, mais je ne suis pas sûr d'avoir bien expliqué mon souci.
Chronologiquement:
Je suis sur TextBox(0), je clique sur Command1, le Focus se retrouve sur TextBox(1). Et c'est là que je me retrouve confronté à mon souci.
1: Soit j'inclue l'instruction notée en rouge sur le programme, auquel cas je suis obligé de réécrire la valeur que contenait Text1, même si cette valeur n'avait pas besoin d'être changée.
2: Soit je n'inclue pas cette instruction auquel cas et je suis obligé d'effacer manuellement la valeur en place pour inscrire la nouvelle.
En fait, je voudrais pouvoir arriver sur Text1 et choisir de changer ou pas la valeur en place.
1: si je n'ai pas à changer cette valeur, un click sur Command1 m'envoie au Text1 suivant et la valeur du précédent n'a pas bougé.
2: si je dois changer la valeur, le fait d'entrer une valeur quelconque efface la valeur en place et la remplace par la 1ère valeur que j'inscris.
J'ai déja vu ça quelque part. Je crois que la fenêtre sur laquelle j'arrive doit être en surbrillance, avec la Focus. Voilà, j'espère avoir été plus clair. A bientôt


Private Sub Text1_Change(Index As Integer)
Command1.Default = True
End Sub

Private Sub Command1_Click()
Static i As Integer
Text1(i) = ""
Text1(i).SetFocus
i = i + 1
End Sub
0
rebelette Messages postés 63 Date d'inscription lundi 19 octobre 2009 Statut Membre Dernière intervention 5 janvier 2011
14 févr. 2010 à 14:05
Merci pour ces informations, je m'y lance et te donne des nouvelles dès que j'ai avancé
0
rebelette Messages postés 63 Date d'inscription lundi 19 octobre 2009 Statut Membre Dernière intervention 5 janvier 2011
14 févr. 2010 à 22:43
C'est super, c'est exactement ce que je cherchais. Thanks a lot


Private Sub Command1_Click()
Static i As Integer
Text1(i).SelStart = 0
Text1(i).SelLength = Len(Text1(i).Text)
Text1(i).SetFocus
i = i + 1
End Sub
0
Rejoignez-nous