134 messaggi dal 01 novembre 2012
Buongiorno,

nelle TextBox ottengo solo il separatore di migliaia e non
riesco ad ottenere i decimali con la conversione del punto dal tastierino numerico in virgola.

char ch = e.KeyChar;
{
  if (!Char.IsDigit(ch) && ch != 8)
  {
  e.Handled = true;
  }
}

if (e.KeyChar == (char)Keys.Enter)
{
  decimal num = Decimal.Parse(TextBox1.Text); //  ottenere i migliaia
                TextBox1.Text = num.ToString("#,##0.00", CultureInfo.CurrentCulture.NumberFormat);
}
  if (TextBox1.Text.EndsWith("."))  //  ottenere i decimali
  {
     TextBox1.Text = TextBox1.Text.Substring(0, TextBox1.Text.Length - 1);
     TextBox1.AppendText(",");
  }

if ((e.KeyChar != (char)Keys.Back) && (!char.IsNumber(e.KeyChar.ToString(), 0)) && e.KeyChar != 44)
 e.Handled = true;
 if (e.KeyChar == 44 && TextBox1.Text.Split(',').Count() > 1)
 {
    e.Handled = true; 
  }
            
if (e.KeyChar == (char)Keys.Enter)
{
  TextBox2.Focus();
}


Prego gentilmente un gradito aiuto nella risoluzione.

Anticipatamente ringrazio e fiducioso, saluto
Domenico.
Ciao!
non sono sicuro di aver capito il problema ma prova a guardare la soluzione seguente:


  if (e.KeyChar == (char)Keys.Enter)
            {
                TextBox1.Text = TextBox1.Text.Replace(".", ",");
                decimal num = Decimal.Parse(TextBox1.Text); //  ottenere i migliaia
                TextBox1.Text = num.ToString("#,##0.00", CultureInfo.CurrentCulture.NumberFormat);
            }



Praticamente prima di visualizzare il punto dei decimali, controllo se nel textbox è stato inserito il punto del tastierino numerico e lo converto in virgola.. in questo modo quando fai il parse riconosce correttamente sia le migliaia che gli eventuali decimali inseriti
Fammi sapere se ti è di aiuto.
grazie
Maurizio
134 messaggi dal 01 novembre 2012
Gent.mo Maury07,

ringrazio della disponibilità e tempestività.

Riconosce le migliaia e non riconosce sia il punto che dovrebbe convertire in virgola del tastierino numerico e sia la virgola ed il punto della tastiera.

Domenico.
134 messaggi dal 01 novembre 2012
Gent.mo Maury07,

faccio seguito alla precedente che il codice funziona eliminando la presente condizione che la TextBox accetta solo numeri e non stringhe:
char ch = e.KeyChar;  //  Accetta solo numeri
{
  if (!Char.IsDigit(ch) && ch != 8)
  {
     e.Handled = true;
  }
}

Gradirei che la condizione ci sia. E' possibile modificare il codice?

Grazie
Domenico
nel codice che ho provato ho messo solo il codice seguente all'ionterno dell'evento KeyPress della textbox:

  private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {

            if (e.KeyChar == (char)Keys.Enter)
            {

                TextBox1.Text = TextBox1.Text.Replace(".", ",");
                decimal num = Decimal.Parse(TextBox1.Text); //  ottenere i migliaia
                TextBox1.Text = num.ToString("#,##0.00", CultureInfo.CurrentCulture.NumberFormat);
                TextBox2.Focus();
            }
        }


ho provato inserendo sia il punto che la virgola del tastierino numerico e mi riconosce sempre i decimali.
Non va inserito manualmente il punto delle migliaia, quello viene fatto automaticamente dal codice.
anche inserendo solo questo codice non funziona?
grazie
134 messaggi dal 01 novembre 2012
Gent.mo Maury07,

il codice funziona perfettamente e gradirei se è possibile inserire una condizione che la TextBox accetta solo numeri e non caratteri.

Grazie.
Domenico
prova con il codice seguente


      private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            char ch = e.KeyChar;  //  Accetta solo numeri

            if (!Char.IsDigit(ch) && ch != 8)
            {
                e.Handled = true;
            }      
  
           if (ch == 44 || ch == 46)
            {
                e.Handled = false;
            }
         

            if (e.KeyChar == (char)Keys.Enter)
            {  

                TextBox1.Text = TextBox1.Text.Replace(".", ",");
                decimal num = Decimal.Parse(TextBox1.Text); //  ottenere i migliaia
                TextBox1.Text = num.ToString("#,##0.00", CultureInfo.CurrentCulture.NumberFormat);
              
            }
        }


quel 44 e 46 sono i valori di default della KeyChar che rappresentano la virgola e il punto.
Non ricordo se questo può cambiare in base alla lingua selezionata per la tastiera quindi non so quanto è robusta come soluzione ma dovrebbe funzionare!
fammi sapere!
134 messaggi dal 01 novembre 2012
Gent.mo Maury07,

sono rammaricato e mi scuso non funziona ancora, accetta anche i caratteri
La tastiera è configurata italiana.
Domenico.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.