0

这似乎应该很容易解决,但是我的头很炸,我想不出一个好的方法来做到这一点!基本上,我有一个表格,上面有详细信息。用户可以单击一个按钮来选择一个新的 PIN 号码。在这个表单上,我有一些正则表达式来确保在文本框中输入的值是一个数字并且大于 4 位。

代码:

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 回答