0

これは簡単に解決できるように思えますが、私の頭は揚げられていて、これを行う良い方法が思いつきません! 基本的に、詳細が記載されたフォームがあります。ユーザーは、ボタンをクリックして新しい PIN 番号を選択できます。このフォームでは、テキスト ボックスに入力された値が数値であり、4 桁を超えることを確認するための Regex があります。

このためのコード:

this.buttonOK.Enabled = false;
        this.textBoxPin.TextChanged += delegate(object sender, EventArgs e)
        {
            String pattern = @"[0-9]{4,}";
            Regex regex = new Regex(pattern);
            if (regex.IsMatch(textBoxPin.Text))
            {
                buttonOK.Enabled = true;

            }

        };

これで、PIN が 4 桁を超えると OK が有効になりますが、バックスペースを使用して数字がなくなっても問題ありません - OK は以前から有効になっています。ボタンを再度無効にする方法はありますか?

現時点では、[OK] がクリックされたときのイベントがあり、それが 4 未満です。コードが以下に示すように、警告メッセージがポップアップ表示されます。

private void buttonOK_Click(object sender, EventArgs e)
    {
        if (textBoxPin.Text.Length < 4)
        {
            DialogResult dr = MessageBox.Show("PIN must be at least 4 digits!", "Important Message", MessageBoxButtons.RetryCancel, MessageBoxIcon.Exclamation);

            if (dr == DialogResult.Cancel)
            {

            }
            else if (dr == DialogResult.Retry)
            {


            }
        }
    }

しかし、この方法では、変更を元に戻す方法がわかりません。必要な大きなプロジェクトで相互作用するさまざまなものがあるためです(基本的に、キャンセルされた場合、変更を保存したくないなど) .)。これが、ボタンが正しくなくなった場合にボタンを再度無効にできれば簡単だと思う理由です。これを行う方法はありますか?

また、バックスペースを押すと、文字も入力できるようになりますが、これは許可されるべきではありません。キープレスをいじってみましたが、正規表現の方がきれいだと思いました。

どんなアドバイスでも大歓迎です!

4

2 に答える 2

2
if (regex.IsMatch(textBoxPin.Text))
{
    buttonOK.Enabled = true;
}
else
{
    buttonOK.Enabled = false;
}

それはうまくいきませんか?

短縮:

buttonOk.Enabled = regex.IsMatch(textBoxPin.Text)
于 2013-07-04T11:01:27.563 に答える
1

試しましたか:

    this.textBoxPin.TextChanged += delegate(object sender, EventArgs e)
    {
        String pattern = @"[0-9]{4,}";
        Regex regex = new Regex(pattern);
        if (regex.IsMatch(textBoxPin.Text))
        {
            buttonOK.Enabled = true;

        }
        else
        {
            buttonOK.Enabled = false;
        }

    };

?

于 2013-07-04T11:01:27.807 に答える