Localisation & RichEdit

Résolu
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 - 16 déc. 2006 à 20:40
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017 - 17 déc. 2006 à 14:09
Je fais des tests sur mes prog sur les saisies utilisateur.

Par exemple si on tente Int32.Parse (0.5) ou Int32.Parse (0,5) on aura ou non une exception de levee.
Maintenant si on veut saisir un montant en ?, genre 100,00? dans un contrôle, comment fait-on ? doit-on tout coder à la mano ?

Merci,

++

Vince

----------------------------
C++ forever
C# amateur

6 réponses

scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
17 déc. 2006 à 14:09
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Globalization;
using System.Text;
using System.Windows.Forms;

namespace ComputeCMYK
{
    public partial class PriceTextBox : TextBox
    {
        private double  m_Value;

        public PriceTextBox()
        {
            InitializeComponent();
        }

        #region Properties
        public double Value
        {
            get { return m_Value; }
            set { m_Value = value; }
        }
        #endregion

        public void AssignValue(float value)
        {
            this.Value = value;
            this.PriceTextBox_Validated(this, null);
        }

        private void PriceTextBox_Validated(object sender, EventArgs e)
        {
            if (sender is TextBox)
            {
                TextBox T = ((TextBox)sender);
               
                // http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconStandardNumericFormatStrings.asp
                string szDisplayedText = this.Value.ToString("C", CultureInfo.CurrentCulture);
                T.Text = szDisplayedText;
            }
        }

        private void PriceTextBox_Validating(object sender, CancelEventArgs e)
        {
            // http://faqcsharp.developpez.com/?page=form_textbox
            if (sender is TextBox)
            {
                TextBox T = ((TextBox)sender);
                try
                {
                    this.m_Value = Double.Parse(T.Text);
                    m_errorProvider.SetError(T, "");
                }
                catch (ArgumentNullException)
                {
                    m_errorProvider.SetError(T, "La case ne peut être vide !");
                    T.SelectAll();
                    e.Cancel = true;
                }
                catch (OverflowException)
                {
                    m_errorProvider.SetError(T, "Le nombre est trop grand !");
                    T.SelectAll();
                    e.Cancel = true;
                }
                catch (FormatException)
                {
                    m_errorProvider.SetError(T, "Le format n'est pas correct");
                    T.SelectAll();
                    e.Cancel = true;
                }
            }
        }

        private void PriceTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar))
            {
                // Save decimal separator from system configuration
                char Separateur = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];

                // check separator                if ((e.KeyChar '.') || (e.KeyChar ','))
                {
                    // Save the good separator
                    e.KeyChar = Separateur;
                }
                else
                {
                    e.Handled = true;
                }
            }
        }
    }
}
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
16 déc. 2006 à 22:23
Salut,
Il me semble que les méthodes tryParse (par exemple celle de double [double.TryParse]) mettent à dispositions les overloads nécessaires pour négocier ce genre de situation (NumberStyle et IFormatProvider).

<hr size="2" />-Blog-
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
16 déc. 2006 à 22:43
Salut,

Pas forcément, notamment si la saisie suis exactement les règles de la culture courante.

Pour ton exemple tu peux parser de cette manière :
string montantText = "100,00?";
decimal montant;
if (decimal.TryParse(montantText, NumberStyles.Currency, CultureInfo.CurrentCulture.NumberFormat , out montant))
{
    MessageBox.Show(montant.ToString());
}
else
{
    MessageBox.Show("Echec");
}

/*
coq
MVP Visual C#
CoqBlog
*/
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
16 déc. 2006 à 22:47
Bon, ça m'apprendra à mettre 20mins a répondre...
On va dire que je confirme :p

/*
coq
MVP Visual C#
CoqBlog
*/
0

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

Posez votre question
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
16 déc. 2006 à 23:40
lol, bah, comme ça il a un petit exemple ;-)

<hr size="2" />-Blog-
0
scoubidou944 Messages postés 714 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 19 janvier 2017
17 déc. 2006 à 11:14
hum compliquons le problème alors.
si on prend Excel, lorsque l'on veut éditer une zone contenant un style monétaire, il vire l'info pendant la saisie.
100,00 ? passe donc à 100.
Et au passage, n'accepter que les chiffres.

Y'a bien qql'1 qui a codé ca dans son coin quand meme ?

----------------------------
C++ forever
C# amateur
0
Rejoignez-nous