scoubidou944
Messages postés714Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention19 janvier 2017
-
16 déc. 2006 à 20:40
scoubidou944
Messages postés714Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention19 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
scoubidou944
Messages postés714Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention19 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
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;
}
}
}
}
}
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 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).
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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");
}
scoubidou944
Messages postés714Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention19 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