0

我想在我的文本框中放置千位分隔符。我编写了以下代码,但效果不佳。例如 :

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);
    }
}
4

3 回答 3

3

我解决了我的问题:

 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);
            }
        }
于 2013-09-04T10:09:11.947 回答
1

首先,您可以有一种更简单的方法来检查文本框中的所有字符是否为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

于 2013-09-03T13:44:35.137 回答
0

TextBoxes倾向于在后台更改文本时将光标位置设置为开头。因此,为了使输入尽可能直观,您需要执行以下操作:

  1. 在当前光标位置拆分字符串并从第一部分删除所有外来字符(包括千位分隔符,因为您想在之后插入它们)
  2. 获取格式正确的值(如果您的应用程序关心,也可以是输入的数值)
  3. 获取格式化字符串中输入字符串第一部分的最后一个字符(参见#1)的位置(通过按字符比较它们,跳过千位分隔符)
  4. 更新你的价值TextBox
  5. 将光标位置设置为#3计算的位置

上述算法的唯一问题是,当在正确的位置输入千位分隔符时,光标将直接在它之前结束,但解决这个问题(并实际编写代码)留作练习;)

于 2013-09-03T14:25:47.837 回答