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

TextBoxテキストがバックグラウンドで変更されると、カーソル位置が先頭に設定される傾向があります。したがって、入力をできるだけ直感的にするには、次のことを行う必要があります。

  1. 現在のカーソル位置で文字列を分割し、最初の部分からすべての外部文字 (後で挿入するため、千単位の区切り文字を含む) を削除します。
  2. 正しい形式の値を取得します (アプリケーションがそれを気にする場合は、入力の数値も取得します)。
  3. 入力文字列 (#1 を参照) の最初の部分の最後の文字の位置を、書式設定された文字列で取得します (文字単位で比較し、3 桁ごとの区切り記号をスキップします)。
  4. の値を更新しますTextBox
  5. #3で計算した位置にカーソル位置を設定

上記のアルゴリズムの唯一の問題は、3 桁区切り記号を正しい位置に入力すると、カーソルがその直前に移動することですが、それを解決する (そして実際にコードを記述する) ことは演習として残されています ;)

于 2013-09-03T14:25:47.837 に答える