2009-05-11 5 views

ответ

4

В VB.NET ...

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

И C# ...

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

Ничего себе, только полу-двоеточие отделяет VB.NET от C# :-) – ichiban

+0

большое спасибо за этот ответ – 2009-05-11 20:18:43

+0

@ichiban - и VB.NET короче, чем растянутый C# тоже: P – MarkJ

2

Опираясь на ответ Larsenal, то как об использовании событий что-то вроде этого TextBox.Validating:

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

Для дополнительного удовольствия давайте сделаем парсер немного более сложным.

Вместо Double.TryParse, давайте создадим Percent.TryParse, который проходит эти испытания:

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" 

Я думаю, что эти правила выглядят справедливыми, если бы я был пользователь должен ввести процент. Он позволяет вводить десятичные значения вместе с процентами (требуя концевой символ «%» или что введенное значение больше 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); 
    } 
} 

Конечно, все это излишеством, если вы просто поставить «%» знак вне от TextBox.

0

Небольшой обман для заполнения Label's (& TexBox) на панели перед входом пользователя. Это охватывает десятичные числа, целые числа, проценты и строки.

Использование C# 1.1 в случае Page_Load, прежде чем любая вещь случается:

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 > 
} 
Смежные вопросы