En Visual Basic Expresse 2010, Quid TexBox

Messages postés
6
Date d'inscription
lundi 24 juin 2019
Statut
Membre
Dernière intervention
27 juillet 2019
-
Bonjour à Tous,
Une petite explication pour comprendre la raison de ma demande sur ce forum.
En 1990 un collègue de travail selon mes indications m'a réalisé un petit programme en FOX PRO qui malheureusement ne tourne plus en Windows 10. Cet ami n'étant plus disponible, Moi ayant subi un AVC, pour ne pas perdre de moyens et surtout faire travailler mes Neurones, je me suis mis à 77 printemps dans l'idée de réécrire ce petit programme mais cette fois avec Visual Basic Express 2010.
Je suis conscient que je devrais probablement et cela est même certain faire appel à un spécialiste pour finaliser ce projet, toutefois je voudrais avant de passer la main en réaliser la partie Graphique ( présentation des menus etc. ) et une partie de la programmation de base.
C'est donc ici que j'ai besoin de vos conseils, j'explique :
Dans ma fenêtre de saisie de diverses données j'ai un TextBox ( en principe limité à 40 caractères en saisie totale) qui doit en fait recevoir une donnée de longueur variable concernant le type de GPS utilisé; exemple " TomTom Go 500 ".
QUESTION : comment programmer pour que ce TextBox me laisse écrire la totalisé de ma réponse avant de passer à une procédure de calcul.
autrement dit si la réponse est inférieure à la limite imposée, se qui déclenchera son passage vers la procédure de calcul devrait être non pas la limite imposée, mais la tabulation ou mieux l'appui sur la touche ENTER.
J'ai tenté de trouver la solution Mais je n'arrive à rien, je Tape dans la TextBox le premier caractère T ( de TomTom ) un MsgBox m'indique bien que la lettre introduite est T mais lorsque je ferme le MsgBox, je n'ai pas la possibilité d'introduire la lettre suivante O, car une fois le clic sur le OK pour fermer le MsgBox la procédure de calcul est enclenchée et l'affichage du résultat est automatiquement inscrit dans l'autre TextBox.
Voilà j'espère que mon explication est bonne, et que je n'abuse pas de votre disponibilité
En tous les cas, Positif ou négatif grand merci pour vos réponse à Venir.

Amicalement

infos perso supprimées Modération CCM

Configuration: Windows / Chrome 75.0.3770.100
Afficher la suite 

7 réponses

Messages postés
13847
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 octobre 2019
403
0
Merci
Bonsoir

La touche Tab transfert le focus à un autre contrôle, tu peux donc utiliser l'évènement LostFocus.

Pour la touche Entré, il faut se servir de l'évènement Keypress (éventuellement KeyDown ou KeyUp), vérifier quelle touche est tapée et réagir à la touche Entré.

Par contre, ce n'est peut-être pas la solution la plus ergonomique.
Je crois comprendre que tu attends des réponses prédéfinies, qu'elles soient fixes (c'est toujours 1, 17 ou 32), issues d'une "base de données" évolutives ou être le résultat d'algorithmes.
Dans ce cas un combobox est adapté.

Je suis conscient que je devrais probablement et cela est même certain faire appel à un spécialiste pour finaliser ce projet,

Oui, si tu pars sur cette idée, tu n'y arriveras pas. Nous avons sur les forums des codeurs qui ont commencé plus âgés que toi et brillamment réussi.
Mais, ils ont partis avec un esprit positif, et n'ont pas mis la charrue avant les boeufs.
Et vue ta question, je pense que toi si.
Passer quelques jours à apprendre quelques bases te seraient bien plus bénéfique que te lancer bille en tête dans ton projet quitte à aller sur une mauvaise piste.

Voici, un bon cours pour débuter en VB.Net http://plasserre.developpez.com/cours/vb-net/ même si l'auteur considère la programmation objet comme un effet de mode, alors que c'est l'essence des langages .Net .
Whismeril
Messages postés
13847
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 octobre 2019
403 -
PS, pourquoi 2010?
2012, 2013, 2015, 2017 et 2019 possédant tous des versions gratuites.
Commenter la réponse de Whismeril
Messages postés
6
Date d'inscription
lundi 24 juin 2019
Statut
Membre
Dernière intervention
27 juillet 2019
0
Merci
Bonjour " Whismeril "

En premier merci pour la réponse et surtout pour le lien vers un cours VB.Net, que j'en suis convaincu va me servir et me permettre de trouver certaines réponses à mes interrogations.

Je pense que mon précédent courriel était un rien confus et c'est je pense que ma demande n'à pas été correctement comprise, mais tout d'abord : NON je ne met pas les bœufs devant la charrue et je ne part pas avec dans l'esprit l'impossibilité de réécrire ce petit programme.
Mais ayant gardé des séquelle ( mémoire, réflexion ... ) de mon récent AVC, j'ai voulu exprimer le fait qu'un spécialiste sera le bien venu afin de me corriger et de m'aider.

Ceci étant dit voici ce que j'ai essayer d'expliquer et avoir en réponse la ou les lignes programmation à placer ou a remplacer. Donc voici un petit schéma:

Dans ma fenêtre de saisie j'ai donc
plusieurs Label (Texte explication sur la réponse à donner ) en regard un TextBox pour recevoir l'info
cette première partie ne me pose pas de souci et est donc OK
Mais en dernier j'ai à nouveau un Label ( avec le texte " Donnez le Type de GPS Utilisé " ) en regard un TextBox qui lui va recevoir la réponse ( Qui sera selon de longueur Variable )
C'est donc à ce niveau que j'ai le souci.
En effet j'arrive bien à Obtenir ce que je veux et cela s'affiche bien au bon endroit
MAIS LE PROBLÈME :
Lorsque je veux introduire la réponse en Tapant la toute première Lettre dans La TextBox cela déclenche immédiatement la procédure de calcul et de composition de la réponse.
donc sans m'avoir permis d'introduire une réponse complète.
J'ai tenté plusieurs Options Mais sans succès : Voici le contenu de la TextBox donc où est l'erreur0

Private Sub TEX_GPS_TYPE_TextChanged(sender As System.Object, e As System.EventArgs) Handles TEX_GPS_TYPE.TextChanged

' DEVRAIT ATTENDRE L'APPUI SUR ENTER AVANT D'EXÉCUTER LA RECHERCHE LATITUDE / LONGITUDE

If TESTE <> ChrW(13) Then
' PHASE DE RECHERCHE DE LA lATITUDE - LONGITUDE
' GPS.CheckState = CheckState.Unchecked
' TEX_CM_LONGI.TabStop = True
MLAT = TEX_REF_LATI.Text
MsgBox("La Latitude donnée " & MLAT)
MLONG = TEX_REF_LONGI.Text
MsgBox("La Longitude donnée " & MLONG)

MLAT_1 = (MLAT.Substring(0, 2))
MsgBox("le premier couple de caractères = " & MLAT_1)
MLAT_2 = (MLAT.Substring(2, 1))
MsgBox("le second couple de caractères = " & MLAT_2)
MLAT_3 = (MLAT.Substring(3, 6))
MsgBox("le troisième couple de caractères = " & MLAT_3)

MLONG_1 = (MLONG.Substring(0, 1))
MsgBox("le premier couple de caractères = " & MLONG_1)
MLONG_2 = (MLONG.Substring(1, 1))
MsgBox("le second couple de caractères = " & MLONG_2)
MLONG_3 = (MLONG.Substring(2, 6))
MsgBox("le troisième couple de caractères = " & MLONG_3)

MLATR = Trim(LTrim(MLAT_1)) & Chr(176) & Trim(LTrim(MLAT_3))
MsgBox(MLATR)
MLONGR = Trim(LTrim(MLONG_1)) & Chr(176) & Trim(LTrim(MLONG_3))
MsgBox(MLONGR)

INFO_SITU = Trim(LTrim(MLATR)) & " de Latitude " & " et " & Trim(LTrim(MLONGR)) & " de Longitude "
TEX_COORD.Text = INFO_SITU
MsgBox(TEX_COORD.Text)

Else
' TEX_GPS_TYPE.Text = Trim(LTrim(TEX_GPS_TYPE.Text))
' MsgBox("Le type de GPS est " & TEX_GPS_TYPE.Text)
' TEX_GPS_TYPE.Text = Trim(LTrim(TEX_GPS_TYPE.Text)) + ""
MsgBox("Le type de GPS est " & TEX_GPS_TYPE.Text)
TESTE = Len(TEX_GPS_TYPE.Text)
MsgBox("TESTE est égal à " & TESTE)
End If

End Sub
Commenter la réponse de luclochtmans
Messages postés
13847
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 octobre 2019
403
0
Merci
Bonsoir,
J’avais bien compris, c’est pourquoi je t’ai parlé des événements lostfocus et keypress.
Il ne faut pas utliser l’événement textchanged
Commenter la réponse de Whismeril
0
Merci
Bonjour,
Avec un peu de retard, merci pour la confirmation et le rappel pour Lostfocus et Keypress.
Je n'ai pas encore trouver la solution avec ces deux possibilités mais dans l'attente j'ai donc détourné mon problème et j'obtiens ainsi le résultat voulu.
Donc pas de la TOP manière, mais l'important c'est que je peux maintenant progresser vers un fin plus qu'honorable d'autant que la finalité de ce petit programme est à mon usage personnel.
Et si de nature il devait être un jour mis à la disposition de tout un chacun,
AVANT il sera encore temps de le faire analyser par un programmeur plus confirmer.

Merci pour l'intérêt que vous avez porter à ma requête.

Amicalement
Luc
Commenter la réponse de LucLOCHTMANS
Messages postés
13847
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 octobre 2019
403
0
Merci
Alors si tu veux que ce soir la touche Entrée
    Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox2.KeyPress
        If e.KeyChar = Convert.ToChar(13) Then
            'ton code ici

        End If
    End Sub


Si tu veux que ce soit Tab
    Private Sub TextBox2_Leave(sender As Object, e As EventArgs) Handles TextBox2.Leave
        'ton code ici
    End Sub

Je m'était trompé, LostFocus c'est en VBA, en VB.Net c'est Leave

Et si tu veux l'une ou l'autre
    Private Sub TextBox2_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox2.KeyPress
        If e.KeyChar = Convert.ToChar(13) Then
            VerifLucLothmans()
        End If
    End Sub

    Private Sub TextBox2_Leave(sender As Object, e As EventArgs) Handles TextBox2.Leave
        VerifLucLothmans()
    End Sub

    Private Sub VerifLucLothmans()
        'ton code ici
    End Sub


PS tu remarqueras que les codes que j'ai posté, sont
  • en couleur
  • indentés

bref agréablement lisibles.

Merci à l'avenir de présenter tes codes de la même manière en suivant ce petit tuto
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Commenter la réponse de Whismeril
0
Merci
Bonjour,
Je confirme donc la bonne réception de votre courriel, hé oui mon erreur à été de faire un simple copié collé de ma structure ce qui à eu pour effet de mettre tout en Noir et Blanc.
Je prends donc bonne note de votre remarque et promet pour les futurs échanges de mettre la couleur Ad Hoc et l'indentations.
Je vais donc tester ces 3 suggestions qui je suis convaincu vont alléger tant la programmation que la composition du formulaire de saisie.
Bien après une dernière petite demande, je vais vous laisser à vos propres occupations mais vous mémorise en cas de besoin ou conseils.
Voici, pour pouvoir évoluer dans la conversion de mon petit utilitaire FOX PRO en Visual Basic Express 2010 je voudrais savoir quel est la différence ( lu sur VB Net pour les Nul ) entre un tableau et en FoxPro une Base de données relationnelle.
Pour info en suivant ce qu'expliqué dans VB Net Pour les nul je suis arrivé à créer un tableau 9 colonnes et une seule ligne. Mais ne le retrouvant pas dans mes fichiers la question que je me pose :
Ce tableau ou se trouve t'il, peut on l'éditer hors programme et éventuellement est il possible de réutiliser mes bases de données ( Format DBase ) avec Visual Basic.
Voilà je pense qu'informé sur ce dernier point je serait remis sur les rails et pourrait plus sereinement poursuivre ma petite aventure de réécriture.

encore une fois un grand merci pour votre aide
Amicalement
Luc
Commenter la réponse de LucLOCHTMANS
Messages postés
13847
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
21 octobre 2019
403
0
Merci
entre un tableau et en FoxPro une Base de données relationnelle.


Ça n'a rien à voir.

Une base de données est un fichier externe à l'application dans lequel sont stockés des données.
Cela peut-être un simple fichier texte (csv, tabulé, xml json, etc...), un fichier plus évolué (excel, etc...) ou un SGBD (Système de Gestion de Base de Données) (sql server, access, sqlite etc....)
DBase rentre dans ce dernier type, il me semble.

Le qualificatif relationnel signifie qu'il peut y avoir des relations entre différentes tables de la base de données.
Une table c'est un peu comme un "sous fichier" ou une feuille dans excel, dans laquelle sont stockées des données d'un thème.

Par exemple, pour une basse de données client, il peut y avoir une table Villes, chaque ville ayant, un nom et un code postal et un code commune
Dans la table Clients, il n'y a que le champ CodeCommune, en lien avec la table Villes, ainsi on stocke un seul int dans le client et pas une string, qui pourrait être mal saisie et utiliser plus d'espace et 2 int.
La relation entre les tables permet de connaitre la ville en fonction du code commune.
Par exemple si tu as 3 clients à Longeville-Les-Metz, tu stockes 3 fois 57412 au lieu de 3 fois 57050 Longeville-Les-Metz. Au final, tu gagnes de la place.


Un tableau est une collection de données chargées dans ton application.
On peut imaginer un tableau à 1 dimension comme une suite de "cases" les unes après les autres.
Dans chacune des ces cases, il y a une donnée du type prédéfini pour le tableau. Un tableau de 100 int contiendra 100 valeurs entières.
Un tableau à 2 dimensions peut-être imaginer comme plusieurs lignes de cases, toutes de la même tailles.
Un tableau à 3 dimension, comme une sorte de cube.
Un tableau de tableaux, comme des colonnes de tailles différentes les une à coté des autres.

Bien qu'on puisse créer des configurations très complexes, le tableau reste une collection "primitive", on l'a crée tout au début de la programmation.
En voici les principaux défaut, il a une taille prédéfinie, on ne peut pas insérer une valeur (il faut décaller toutes les valeurs suivantes et ensuite affecter la valeur insérée), on ne peut pas supprimer une valeur, et pour trier c'est galère.
VB (contrairement à la majorité des langages) permet de redimensionner un tableau mais c'est très gourmand en ressources car en fait ça crée un tableau plus grand, déplace toutes les données et refait tous les liens entre tes variables et le nouvel emplacement de la donnée.

Bref, il vaut mieux utiliser une collection basée sur la liste chainée (toutes les autres collections de VB.Net).
La List(of ) en étant l'implémentation la plus simple.

Supposons à nouveau une gestion de clientèle, tu crées un objet Client qui dispose en propriété de toutes les informations nécessaires (Nom de la Société, Adresse, téléphone du standard etc....)
Et tu stockes chaque Client dans une List(of Client).

Et puis si dans une société tu as plusieurs contacts, alors tu peux mettre dans Client, une List(of Contact), le Contact contenant lui même une List(of NumeroTelephone) etc....

D'ailleurs, une fois qu'on a bien compris comme marche une collection d'objet et donc le fonctionnement des objets, on ne s'embête plus à faire des vérifications comme tu as demandé au début du ce fil.
On binde directement les collection au formulaire et ça se débrouille (faut que l'objet soit bien codé)
Une petit exemple ici
https://codes-sources.commentcamarche.net/faq/1291-utilisation-du-binding-au-travers-de-l-objet-databindingsource
Commenter la réponse de Whismeril