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

Windows Forms Discussion :

[C#] CUltureInfo, NumberGroupSeparator et TextBox


Sujet :

Windows Forms

  1. #1
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut [C#] CUltureInfo, NumberGroupSeparator et TextBox
    Bonjour,
    J'ai developpé tout un projet manipulant des nombres et les affichant entre autre dans des TextBox.
    J'aimerais utiliser l'espace comme séparateur de groupe tout les 3 chiffres.

    Est-il possible, sans trop de modification de code de modifier d'appliquer cette modification ?
    Je pensais créer une classe personnel de TextBox à laquelle je spécifie le format mais cela ne fonctionne pas.
    Je pensais regarder du coté du CultureInfo mais pas de résultats non plus.
    Pour afficher dans la console, pas dfe problème avec un Console.Writeln mais je n'arrive pas dans un TextBox.

    Merci pour votre aide

  2. #2
    Membre expérimenté Avatar de toniolol
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2005
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 281
    Par défaut
    Salut je peux te proposer une surcharge de la classe string inspirée de ce cours.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.Text = 99999999.ToString("### ### ###")
    C'est codé vite fait et peut-être pas complètement adapté à ce que tu recherche mais ça pourrait être une piste.
    Sinon pourquoi ne pas utiliser la MaskedTextBox ?

  3. #3
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Effectivement je pourrais également utiliser les MaskedTextBox, mais si j'utilise cette méthode de mask, j'aurais un problème lorsqu'il y a un affichage des nombres décimaux (que je gère d'ailleur mal en ce moent avec les MaskedTextBox).

    Je préférais passer par les NumberFormat à définir dès le début de l'appli pour définir ça une bonne fois pour toute.

  4. #4
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Up up, merci à vous

  5. #5
    Membre confirmé Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Par défaut
    Salut,

    Essaie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NumberFormatInfo nfi = new NumberFormatInfo();
    nfi.NumberDecimalSeparator = ","; // La virgule comme séparateur décimal
    nfi.NumberGroupSeparator = " "; // L'espace comme séparateur des groupes de 3 chiffres
     
    myDouble.ToString("N2", nfi) // Le "N2" c'est pour avoir 2 chiffres après la virgule
    A++

  6. #6
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Merci, effectivement ça fonctionne, il m'affiche correctement le séparateur et les chiffres après la virgule.

    Le problème est que j'aimerais bien donner ce genre de chose comme propriété de mes texteBox directement (je fais une classe qui hérite des textBox et je les mets sur mon projet ensuite)
    Est ce que cela semble faisable ?

    Merci

  7. #7
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Pourquoi n'essayes-tu pas ?

  8. #8
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    J'ai bien essayé avec des choses dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    NumberFormatInfo nfi = new NumberFormatInfo();
    nfi.NumberGroupSeparator = " ";
    this.FormatProvider = nfi;
    Sur une classe hérité des MaskedTexBox que j'ai cré mais cela est totalement sans effet pour le moment

  9. #9
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Ah ok.
    Suggestions :
    - tu créé ta classe héritée de textbox
    et là au choix :
    1 - tu créés une propriété 'Number' (au lieu de text) qui prend un nombre en paramètre
    - tu formatte ce nombre avec la methode vue précédemment
    - tu modifies le texte (via la propriété Text)
    (solution efficace)

    2 - tu overrides Text
    - tu parses le texte d'entrée (Convert.ToDouble(string)) pour chopper un double
    - tu utilises la méthode de tout à l'haure pour la mettre au bon format
    - tu modifies la propriété base.Text avec ton nouveau text formatté.
    (solution moins performante)

  10. #10
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    C'est parfait !!!
    Les 2 méthodes fonctionnent.
    Il ne me reste plus qu'a reprendre le code pour faire cette petite modification.

    Il faut que je vérifie de quelle manière est ce que je renseigne le plus souvent le Text de mes TextBox, ça va etre un bon moment pour vérifier tout le code.

    Merci beaucoup à vous

  11. #11
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Humm petite question supplementaire.
    Ou est ce que je peux trouver la liste de toutes les valeurs disponible pour le string de mon Convert.ToDouble(string Format, nfi);
    Car j'aimerais bien que si il n'y a pas de chiffres après la virgule, qu'il ne me les affiche pas.

    Merci encore à vous

  12. #12
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Autre petite chose,
    J'ai également besoin de lire les infos de ces TextBox et de les convertir en Double.
    J'ai donc une méthode .GetDouble()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public double GetDouble()
    {
      string sValue = this.Text.Trim();
      double dValue = Double.Parse(sValue,System.Globalization.NumberStyles.AllowDecimalPoint);
      return dValue;
    }
    mais le Trim() reste sans effet.

    Merci encore pour votre aide.

    EDIT :
    Je précise que j'ai également essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    nfi.NumberGroupSeparator = "";
    sValue = this.Text.ToString(nfi);
    mais le Text n'étant aps un nombre cela n'a pas d'effet non plus.

  13. #13
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Le Trim reste sans effet ?
    T'as quoi avant et t'as quoi après ?

  14. #14
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    La valeur ne change pas.
    J'ai un string qui vaut par exemple "1 742,12" avant et toujours "1 742,12" après alros que pour pouvoir faire un convert ou parse en double dessus j'aurais besoin d'avoir "1742,12".

  15. #15
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Relis la doc de Trim, tu comprendras

  16. #16
    Membre confirmé Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Par défaut
    Essaie ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strValue = strValue.Trim(" ");
    Et au pire, tu peux faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strValue = strValue.Replace(" ", "");

  17. #17
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    C'est compris, il supprime les espaces qui sont autour et pas ceux qui peuvent être au milieu. Désolé de cette question idiote.
    Finalement j'ai utilsé un this.Text.Remplace (" ","");

    Par contre je n'ai pas trouvé la liste des formats possible pour le Double.ToString(format string, IFormatProvider);
    Le "N2" est bien mais j'aimerais éviter l'affichage des ,00 si il n'y a rien derrière la virgule. Sinon je le fais manuellement, mais ça aurait été plus propre

    Merci

    EDIT : C'est pas vrai, je n'avais pas lu le post de Mast3rMind, j'avais trouvé tout seul....
    Merci beaucoup pour votre aide, je n'en finirais jamais de remercier ce forum.

  18. #18
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Une petite remonté pour cette histoire de format
    Le "N2" est pratique, mais j'aimerais bien ne pas afficher les décimals s'il n'y a que des 0.
    Ex :
    19,03 ok
    mais pas 19,00, plutôt 19

    Merci

  19. #19
    Membre confirmé Avatar de Mast3rMind
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 226
    Par défaut
    Je ne connais pas de solution toute faite. Tu peux toujours te créer une fonction toi-même:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private String MyToString(Double dMyDouble)
    {
    NumberFormatInfo nfi = new NumberFormatInfo();
    nfi.NumberDecimalSeparator = ","; // La virgule comme séparateur décimal
    nfi.NumberGroupSeparator = " "; // L'espace comme séparateur des groupes de 3 chiffres
     
    String strTemp = dMyDouble.ToString("N2", nfi) // Le "N2" c'est pour avoir 2 chiffres après la virgule
     
    if(strTemp.EndWith(",00"))
        return strTemp.Remove(strTemp.Count-3, 3);
    else
        return strTemp;
    }

  20. #20
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Ok, je ferais en manuel alors s'il n'y a rien de tout prêt.

    Merci

Discussions similaires

  1. TextBox - NumberGroupSeparator
    Par flzox dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/11/2008, 11h42
  2. [VB.NET] Sauvegarde dans TextBox des logons utilisés
    Par stephane93fr dans le forum ASP.NET
    Réponses: 3
    Dernier message: 27/10/2005, 11h00
  3. Réponses: 2
    Dernier message: 08/04/2004, 11h11
  4. Réponses: 3
    Dernier message: 25/03/2004, 11h35
  5. [VB6] [Interface] ScrolBar & TextBox
    Par DarkVader dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 25/10/2002, 18h40

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