2009-05-11 10 views

Répondre

4

En VB.NET ...

YourTextbox.Text = temp.ToString("0%") 

et C# ...

YourTextbox.Text = temp.ToString("0%"); 
+1

Wow, juste un point-virgule sépare VB.NET de C# :-) – ichiban

+0

beaucoup de mercis pour cette réponse –

+0

@ichiban - et le VB.NET est plus court que ce C# tentant aussi: P – MarkJ

2

Miser sur la réponse de Larsenal, que diriez-vous en utilisant l'événement TextBox.Validating quelque chose comme ceci:

yourTextBox_Validating(object sender, CancelEventArgs e) 
{ 
    double doubleValue; 
    if(Double.TryParse(yourTextBox.Text, out doubleValue)) 
    { 
     yourTextBox.Text = doubleValue.ToString("0%"); 
    } 
    else 
    { 
     e.Cancel = true; 
     // do some sort of error reporting 
    } 
} 
1

Pour encore plus de plaisir, rendons l'analyseur un peu plus sophistiqué.

Au lieu de Double.TryParse, nous allons créer Percent.TryParse qui passe ces tests:

100.0 == " 100.0 " 
55.0 == " 55% " 
100.0 == "1" 
    1.0 == " 1 % " 
    0.9 == " 0.9 % " 
    90 == " 0.9 " 
50.0 == "50 " 
1.001 == " 1.001" 

Je pense que ces règles semblent juste si je suis un utilisateur doit entrer un pour cent. Il vous permet d'entrer des valeurs décimales avec des pourcentages (nécessitant le caractère "%" ou que la valeur entrée est supérieure à 1).

public static class Percent { 
    static string LOCAL_PERCENT = "%"; 
    static Regex PARSE_RE = new Regex(@"([\d\.,]+)\s*("+LOCAL_PERCENT+")?"); 
    public static bool TryParse(string str, out double ret) { 
     var m = PARSE_RE.Match(str); 
     if (m.Success) { 
      double val; 
      if (!double.TryParse(m.Groups[1].Value, out val)) { 
       ret = 0.0; 
       return false; 
      } 
      bool perc = (m.Groups[2].Value == LOCAL_PERCENT); 
      perc = perc || (!perc && val > 1.0); 
      ret = perc ? val : val * 100.0; 
      return true; 
     } 
     else { 
      ret = 0.0; 
      return false; 
     } 
    } 
    public static double Parse(string str) { 
     double ret; 
     if (!TryParse(str, out ret)) { 
      throw new FormatException("Cannot parse: " + str); 
     } 
     return ret; 
    } 
    public static double ParsePercent(this string str) { 
     return Parse(str); 
    } 
} 

Bien sûr, tout cela est exagéré si vous mettez simplement le signe « % » en dehors du TextBox.

0

Une petite astuce pour peupler Label (& TexBox) dans un panneau avant la saisie des utilisateurs. Cela couvre les décimales, les entiers, les pourcentages et les chaînes.

utilisant C# 1.1 dans l'événement Page_Load avant toute chose se produit:

if (!this.IsPostBack) 

{ 

pnlIntake.Vissible=true' // what our guest will see & then disappear 
pnlResult.Vissible=false" // what will show up when the 'Submit' button fires 

txtIperson.Text = "enter who"; 
lbl1R.Text = String.Format(Convert.ToString(0));  // how many times 
lbl2R.Text = String.Format(Convert.ToString(365)); // days a year 
lblPercentTime = String.Format("{0:p}", 0.00);  // or one zero will work '0' 
lblDecimal = String.Format("{0:d}", 0.00);   // to use as multiplier 
lblMoney = String.Format("{0:c}", 0.00);    // I just like money 

< some code goes here - if you want > 
} 
Questions connexes