[英]thousand separator in C# winforms texbox
我想在文本框中输入千位分隔符。 我已经编写了以下代码,但效果不佳。 例如 :
1-我无法输入30000。
2-123,456 => 561,234。
问题是什么?
private void TextBoxCostTextChanged(object sender, EventArgs e)
{
try
{
var context = this.TextBoxCost.Text;
bool ischar = true;
for (int i = 0; i < context.Length; i++)
{
if (char.IsNumber(context[i]))
{
ischar = false;
break;
}
}
if (ischar)
{
TextBoxCost.Text = null;
}
**TextBoxCost.Text = string.Format("{0:#,###}", double.Parse(TextBoxCost.Text));**
}
catch (Exception ex)
{
ExceptionkeeperBll.LogFileWrite(ex);
}
}
我解决了我的问题:
private void TextBoxCostKeyPress(object sender, KeyPressEventArgs e)
{
try
{
if (!char.IsControl(e.KeyChar)
&& !char.IsDigit(e.KeyChar)
&& e.KeyChar != '.')
{
e.Handled = true;
}
}
catch (Exception ex)
{
ExceptionkeeperBll.LogFileWrite(ex);
}
}
private void TextBoxCostTextChanged(object sender, EventArgs e)
{
try
{
string value = TextBoxCost.Text.Replace(",", "");
ulong ul;
if (ulong.TryParse(value, out ul))
{
TextBoxCost.TextChanged -= TextBoxCostTextChanged;
TextBoxCost.Text = string.Format("{0:#,#}", ul);
TextBoxCost.SelectionStart = TextBoxCost.Text.Length;
TextBoxCost.TextChanged += TextBoxCostTextChanged;
}
}
catch (Exception ex)
{
ExceptionkeeperBll.LogFileWrite(ex);
}
}
首先,您可以使用一种更简单的方法来检查文本框中的所有字符是否都是numbers
,而不是letters
。
double inputNumber;
bool isNumber = double.TryParse(TextBoxCost.Text, out inputNumber);
其次,您使用了错误的函数 。 String.Format
用于将值插入字符串。 ToString()
可用于转换字符串的显示格式(奇数术语,但可以)。
使用以下命令获取带逗号的数字
string withCommas = inputNumber.ToString("#,##0");
TextBoxCost.Text = withCommas;
注意,我没有使用String.Format
。 停止使用String.Format
TextBox
倾向于在后台更改文本时将光标位置设置为开始。 因此,为了使输入尽可能直观,您需要执行以下操作:
TextBox
的值 上面算法的唯一问题是,当在正确的位置输入一个千位分隔符时,光标将直接在其前面结束,但是解决该问题(实际上是编写代码)仍然是一个练习;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.