c# - 文本框为空时禁用验证
问题描述
我有一个带有几个用于输入日期的文本框的表单。我正在使用文本框,因为某些日期可以为空。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; }
}
解决方案
这会有所帮助。私人无效TextBox1_Validating(对象发件人,CancelEventArgs e){bool rVal; 文本框 S1 = (文本框)发件人; if(!string.isnullorempty(S1.text)) { rVal= Tools.ValidDate(S1); } e.Cancel = (rVal) ? 假:真;}
推荐阅读
- hibernate - 如何使用休眠连接两个表?
- java - 如何将字节字符串转换为字符串?
- apache-kafka - 移动端和网页端直接连接kafka是否可行
- c++ - 如何将字符串转换为 ASCII 值的总和?
- python - 通过网状在R中创建python列表
- php - 如何编写带有可选参数和可变长度参数的函数?
- kubernetes - 无法写入文件。以 root 身份安装的卷
- mongodb - 执行聚合时有没有办法对来自多个文档的结果进行分组
- python - 在 Azure Functions 上读取 Shapefile
- javascript - .map 在数组中返回字符串而不是数字数组