2012-10-14 81 views
2

我想在每個3位數組後添加「,」。例如:當我輸入123456789文本框將顯示123,456,789和我此代碼得到它:帶小數點的文本框顯示格式化

private void textBox1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (!string.IsNullOrEmpty(textBox1.Text)) 
    { 
     System.Globalization.CultureInfo culture = new System.Globalization.CultureInfo("en-US"); 
     decimal valueBefore = decimal.Parse(textBox1.Text, System.Globalization.NumberStyles.AllowThousands); 
     textBox1.Text = String.Format(culture, "{0:N0}", valueBefore); 
     textBox1.Select(textBox1.Text.Length, 0); 
    } 
} 

我想這種格式更加具體。我只想爲這個文本框鍵入數字和使用十進制格式(類型之後。)像123,456,789.00,我嘗試使用此代碼:

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.') 
    { 
     e.Handled = true; 
    } 
} 

,但它不工作

+0

它是如何不工作?這裏的代碼實際上做了什麼?如果出現錯誤,請將其包括在內,如果出現錯誤輸出,請將其包括在內 – Sheena

+0

我想加入他們兩個但我不知道該怎麼做。 – arilupus

回答

0

您可以使用數字分組在MSDN 喜歡的東西下面應該工作(修改版)中定義的格式字符串:

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    decimal myValue; 
    if (decimal.TryParse(textBox1.Text, out myValue)) 
    { 
     textBox1.Text = myValue.ToString("N", CultureInfo.CreateSpecificCulture("en-US")); 
     textBox1.SelectionStart = 0; 
     textBox1.SelectionLength = 0; 
    } 
} 

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (!char.IsDigit(e.KeyChar) && e.KeyChar != '.') 
    { 
     e.Handled = true; 
    }   
} 
+1

這需要工作。 TryParse也需要了解文化。當您使用Ctrl + V粘貼文本時,KeyPress沒有什麼意義。改用驗證事件。 –

+0

結果如此怪異的夥計.. 很酷,當文本框被改變,有自動十進制..但是當我輸入12345,文本框顯示54,321.00 – arilupus

0

http://msdn.microsoft.com/en-us/library/fzeeb5cd.aspx#Y600

在將值解析爲十進制數據類型後,只需使用ToString將該十進制變量的值分配給textbox1.Text,並將其傳遞給格式參數。

TextBox1.Text = valueBefore.ToString("C") 

至於防止輸入到文本框,我想確實有一種模式已經。

不管怎樣,試試這個:

if !(Char.IsControl(e.KeyChar) || Char.IsDigit(e.KeyChar) || (e.KeyChar == Keys.Decimal && !(TextBox1.Text.Contains(".")))) 
{ 
    e.Handled = true; 
}