IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Mode pas à pas (VS2013) étrange.


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut Mode pas à pas (VS2013) étrange.
    Bonjour à tous.

    Je me suis amusé à regarder mon code ce dérouler en pas à pas pour vérifier que tout ce passe pour le mieux et je me suis rendu compte d'une chose assez curieuse : ma procédure ne ce termine pas que mon pas suivant me reviens au début de la procédure et recommence les instructions...

    mon code est le 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
    Private Sub Calcul_Prix_De_Vente(sender As Object, e As EventArgs)
     
            Image_TB = sender
     
            If Image_TB.Text.Count = 0 Then
     
                TextBox(Image_TB.Tag * 6 + 4).Text = ""
     
            Else
     
                If Image_TB.Text.Contains(".") Then
                    Image_TB.Text = Replace(Image_TB.Text, ".", ",")
                    Image_TB.Select(Image_TB.Text.Count, 0)
                ElseIf Not IsNumeric(Image_TB.Text) Then
                    Image_TB.Select(Image_TB.Text.Count - 1, 1)
                    Image_TB.SelectedText = ""
                    Exit Sub
                End If
    etc...
    En fait, quand je me situe à la ligne : "Image_TB.Text = Replace(Image_TB.Text, ".", ",")", l'instruction suivante ce retrouve à l'entrée de ma procédure : "Private Sub Calcul_Prix_De_Vente(sender As Object, e As EventArgs)" et non pas à l'instruction "Image_TB.Select(Image_TB.Text.Count, 0)". Du coup lors du second passage, ma condition "If Image_TB.Text.Contains(".") Then" est fausse, et continue la suite de la procédure, et à la fin de la procédure, il reviens au début et me passe à l'instruction suivant celle qui m'à fait revenir au début : " Image_TB.Select(Image_TB.Text.Count, 0)" et continue dans la procédure pour finir (sans revenir au début cette fois ci).

    Je ne sais pas si vous voyez ce que je veux dire !

    Du coup je me dis que mon code est mauvais pas propre et me fait perdre du temps de calcul donc optimisation 0...

    Enfin voila je me demande pourquoi il me fait ce cinéma !
    Merci.

  2. #2
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Il y a fort à parier (vu que ce n'est pas précisé) que ta méthode Calcul_Prix_De_Vente sert de gestionnaire d'évènement pour Image_TB.TextChanged (ou autre évènement similaire)
    Du coup lorsque tu modifies Image_TB.Text (en lui assignant le résultat du Replace) ça déclenche à nouveau l'évènement (même si le premier continu sa route normalement, c'est juste qu'en pas à pas l'attention est porté sur l'un plutôt que l'autre)

    Étant donné que la procédure en question vise à (vraisemblablement) convertir la représentation d'un nombre; tu devrais au choix spécifier la culture d'affichage sur français pour avoir un affichage numérique en français ; utiliser un autre contrôle pour de la saisie numérique (par ex: NumericUpDown) ou utiliser une autre approche pour gérer ta saisie (par ex: Utiliser l'évènement Validating en conjonction [ou pas] avec un Errorprovider pour signifier les erreurs de saisies)

    Mais bon là c'est de l'hypothétique vu qu'on a pas vraiment le contexte global
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  3. #3
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    ah oui en effet c'est bien un événement géré lors des appuis touches ! en fait c'est une textbox sur laquelle on entre le prix des fournitures (en euros) et qui calcule le prix de revente (en € lui aussi). Donc l'afficher en NumericUpDown c'est pas trop pratique ni aussi lisible qu'une textbox (possibilité de rajouter le symbole € en fin de textbox entre autre).

  4. #4
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Je le connais mal mais il me semble que le MaskedTextBox permet ce genre de chose (à voir) après ça changera pas le fait que relancer le même évènement depuis là où on le gère sera problématique mais maintenant que l'origine est cernée ça devrait aller (sinon suffira de poster l'avancement des problèmes )
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  5. #5
    Membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2015
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Février 2015
    Messages : 169
    Points : 60
    Points
    60
    Par défaut
    Exact je vais me renseigner avec le MaskesTextBox !

    Merci bien !

  6. #6
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Hello,

    Personnellement, je rejoinds Sehnsucht quant à l'utilisation du contrôle NumericUpDown. Il permet l'utilisation de décimal donc pas de souci au niveau du prix. Et pour la devise, tu peux toujours ajouter un label avec "€" comme texte après le NumericUpDown ou un ComboBox avec la liste des devises autorisées si cela peut varier.

    Tu auras beaucoup moins de problèmes en utilisant des contrôles prévu pour le type de de données dont tu as besoin. Un TextBox ou MaskedTextBox sont faits, comme leur nom l'indique, pour gérer du texte tandis qu'un NumericUpDown est fait pour gérer des nombres (si si, j'vous jure!).

    Il y aura alors beaucoup de contrôles de saisies à faire ce qui fera donc moins de code et donc un code plus lisible et plus facilement maintenable.
    Kropernic

  7. #7
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Dans l'absolu y'a toujours moyen de se faire une classe perso ; soit un UserControl avec le NumericUpDown avec un Label à côté mais je pense qu'il y a même possibilité d'hériter de NumericUpDown directement et en surchargeant la manière de représenter la valeur d'y ajouter du texte (par exemple le symbole monétaire de la culture (UI ?) en cours)
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  8. #8
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par Sehnsucht Voir le message
    Dans l'absolu y'a toujours moyen de se faire une classe perso ; soit un UserControl avec le NumericUpDown avec un Label à côté mais je pense qu'il y a même possibilité d'hériter de NumericUpDown directement et en surchargeant la manière de représenter la valeur d'y ajouter du texte (par exemple le symbole monétaire de la culture (UI ?) en cours)
    Oui ce serait probablement encore mieux mais bon... Si c'est d'office en €, autant foutre un label avec "€" dedans et on en parle plus, ça ira plus vite ^^.

    Après, si on sait qu'il y a une possibilité d'évolution vers d'autre devise dans l'avenir, soit la combo si l'utilisateur à le choix soit la surcharge avec la devise locale si l'utilisateur n'a pas le choix.

    Tant qu'on n'utilise pas un contrôle prévu pour le texte pour gérer des données exclusivement numérique, ça me va ^^.

    N.B. : Y a juste les données temporelles (gestion de durées supérieures à 24h. ex : "36:53") où je n'ai pas trouvé d'autre moyen que de passer par un MaskedTextBox.
    Kropernic

  9. #9
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut Il n'y a que les imbéciles qui ne changent pas d'avis
    Ma légère digression sur les données temporelles m'a rappelé que je devais ajouter un check dans mon projet en cours pour que l'utilisateur encode une durée valide (i.e. : "08:88" n'étant pas valide).

    Du coup, j'allais bêtement code l'événement Validating de mon MaskedTextBox et en le cherchant de la fenêtre des propriétés, je suis tombé sur l'événement TypeValidationCompleted qui s'utilise en conjonction de la propriété ValidatingType.

    Je ne connaissais pas du tout car je n'utilise quasi jamais de MaskedTextBox.

    Du coup, ce contrôle devient tout à viable sans trop d'effort pour gérer les données numériques. Va par contre falloir être vigilant quant à la culture de l'utilisateur pour savoir s'il faut utiliser la virgule ou le point comme séparateur décimal.
    Kropernic

Discussions similaires

  1. [AC-2007] la mode debogage pas à pas ne fonctionnement pas
    Par s.rais dans le forum Access
    Réponses: 2
    Dernier message: 03/06/2014, 15h38
  2. comment éxécuter un job en mode debogage pas à pas
    Par sinoun dans le forum Exécution et industrialisation
    Réponses: 2
    Dernier message: 13/03/2012, 14h48
  3. Réponses: 8
    Dernier message: 04/04/2009, 12h37
  4. Mode pas à pas qui ne fonctionne pas.
    Par vciofolo dans le forum Access
    Réponses: 2
    Dernier message: 09/11/2005, 09h37
  5. Debuger une procédure stockée en mode pas à pas
    Par Oluha dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/12/2004, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo