-1

問題は、値を入力して10500.00から小数を入力すると、テキストボックスをバックスペースしたりクリアしたりして新しい値を入力することができないということです。立ち往生..値を0.00に戻そうとしましたが、変更されないため、間違った場所に配置したと思います。これが私のコードです

 private void txtTransferAmount_KeyPress(object sender, KeyPressEventArgs e)
        {
            bool matchString = Regex.IsMatch(textBoxTransfer.Text.ToString(), @"\.\d\d");
            if (matchString)
            {
                e.Handled = true;
            }

            if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
            {
                e.Handled = true;
            }

            // only allow one decimal point
            if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
            {
                e.Handled = true;
            }
        }

texbox をバックスペースまたはクリアして新しい値を入力できるようにするには、どのような変更をお勧めしますか?

4

2 に答える 2

1

Backspace (BS) char (8) をトラップして、見つかった場合はハンドルを false に設定できます。

コードは次のようになります...

....
// only allow one decimal point
if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
{
    e.Handled = true;
}

if (e.KeyChar == (char)8)
    e.Handled = false;

イベント ハンドラーが何をしているかを解釈するためにコードをもう少し直感的にするための提案として、実装しているロジックを暗示する var を作成することをお勧めします。何かのようなもの...

private void txtTransferAmount_KeyPress(object sender, KeyPressEventArgs e)
{
    bool ignoreKeyPress = false; 

    bool matchString = Regex.IsMatch(textBoxTransfer.Text.ToString(), @"\.\d\d");

    if (e.KeyChar == '\b') // Always allow a Backspace
        ignoreKeyPress = false;
    else if (matchString)
        ignoreKeyPress = true;
    else if (!char.IsControl(e.KeyChar) && !char.IsDigit(e.KeyChar) && e.KeyChar != '.')
        ignoreKeyPress = true;
    else if (e.KeyChar == '.' && (sender as TextBox).Text.IndexOf('.') > -1)
        ignoreKeyPress = true;            

    e.Handled = ignoreKeyPress;
}
于 2012-04-06T05:42:05.077 に答える