首页 > 解决方案 > 文本框为空时禁用验证

问题描述

我有一个带有几个用于输入日期的文本框的表单。我正在使用文本框,因为某些日期可以为空。datePickers 和 maskedTextBoxes 需要一个值。我正在使用下面的代码来验证日期。文本框正确地接受没有输入,格式为“MMddyyyy”的日期我的问题是当用户输入日期时,然后“糟糕!那是在错误的位置!” 用户不能删除日期并退出文本框。当文本框的值为空或为空时,有没有办法取消验证?

    private void TextBox1_Validating(object sender, CancelEventArgs e)
    {
        TextBox S1 = (TextBox)sender;
        bool rVal = Tools.ValidDate(S1);
        e.Cancel = (rVal) ? false : true;
    }


public static string[] formats = { "M/d/yyyy", "MM/dd/yyyy", "Mdyyyy", "MMddyyyy" };

        public static bool ValidDate(TextBox S1)
    {
        if (string.IsNullOrWhiteSpace(S1.Text)) { return true; }

        if (DateTime.TryParseExact(S1.Text, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime D1))
        { S1.Text = D1.ToShortDateString(); return true; }
        else
        { MessageBox.Show("Invalid date format"); return false; }

    }

更新:我为不同的验证问题找到了不同的解决方案。

“为了修复验证失败,这是由于数据绑定无法将 DBNull.Value 设置到 textbox.text 中,您可以在 Form_Load 部分添加以下行:”

TextBox1.DataBindings["Text"].NullValue = string.Empty;

因此,我将 ValidateDate 函数更改如下:

        public static bool ValidDate(TextBox S1)
    {
        if (string.IsNullOrWhiteSpace(S1.Text)) { S1.DataBindings["Text"].NullValue = string.Empty; return true; }

        if (DateTime.TryParseExact(S1.Text, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime D1))
        { S1.Text = D1.ToShortDateString(); return true; }
        else
        { MessageBox.Show("Invalid date format"); return false; }
    }

标签: c#

解决方案


这会有所帮助。私人无效TextBox1_Validating(对象发件人,CancelEventArgs e){bool rVal; 文本框 S1 = (文本框)发件人; if(!string.isnullorempty(S1.text)) { rVal= Tools.ValidDate(S1); } e.Cancel = (rVal) ? 假:真;}


推荐阅读