当文本框中的文本不再是C#窗体中的正确格式时,禁用“确定”按钮

本文关键字:文本 禁用 按钮 格式 确定 不再 窗体 | 更新日期: 2023-09-27 18:20:55

这看起来应该很容易解决,但我的脑袋被炸了,我想不出一个好方法来解决这个问题!基本上,我有一个表格,上面有详细信息。用户可以点击一个按钮来选择一个新的PIN号码。在这个表单上,我有一些Regex来确保在文本框中输入的值是一个数字,并且大于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)
            {

            }
        }
    }

但通过这种方式,我不知道如何恢复更改,因为在我需要的更大的项目中有很多不同的东西在交互(基本上,如果取消了,我不想保存更改等)。这就是为什么我认为如果按钮不再正确,我可以重新禁用它会更容易。有办法做到这一点吗?

此外,如果我按退格键,我也可以输入字母,这是不允许的。我试着摆弄Keypresses,但我认为regex会更整洁。

如有任何建议,我们将不胜感激!

当文本框中的文本不再是C#窗体中的正确格式时,禁用“确定”按钮

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

这样不行吗?

缩短:

buttonOk.Enabled = regex.IsMatch(textBoxPin.Text)

你尝试过吗:

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