文本框不显示错误

时间:2011-06-28 16:02:24

标签: c# winforms validation datetime date

如果成员没有进入,我试图验证出生文本框字段的两个数据 这两个框会弹出一条错误信息,如“请输入有效的日期格式”

使用以下代码

       if (tbStartDate.Text != "0" && tbEndDate.Text != "0")
       { 

        string dob = tbStartDate.Text;
        DateTime dv = DateTime.Parse(dob);
        string format1 = dv.ToString("yyyy-MM-dd");
        string dob2 = tbEndDate.Text;
        DateTime dt2 = DateTime.Parse(dob2);
        string format2 = dt2.ToString("yyyy-MM-dd");
     }
      else
     {
            MessageBox.Show("pls enter valid date ");

     }

当我尝试保存而不输入文本框值时,它显示的错误是这样的   “字符串未被识别为有效的DateTime”。

任何人都可以帮忙......

这是经过修改的代码,但它仍然在Datetime DV显示错误;

         private void btnCTimetablessave_Click(object sender, EventArgs e)
    {
        string dob = tbStartDate.Text;
        DateTime dv;
        if (!DateTime.TryParse(dob, out dv))
        {

            MessageBox.Show("pls enter a valid  start date");
            return;
        }

        string format1 = dv.ToString("yyyy-MM-dd");
        string dob2 = tbEndDate.Text;
        DateTime dt2;
        if (!DateTime.TryParse(dob2, out dt2))
        {
            MessageBox.Show("pls enter valid end date");
            return;
        }

        string format2 = dt2.ToString("yyyy-MM-dd");

仍然在日期时间Dv显示错误,如“字符串未被识别为有效日期时间”;

这是第三次修改代码

       private void btnCTimetablessave_Click(object sender, EventArgs e)
      {
         string dob = tbStartDate.Text;
        DateTime dv;
        if (!DateTime.TryParse(dob, out dv))
        {

            MessageBox.Show("pls enter a valid  start date");
            return ;
        }

        string format1 = dv.ToString("yyyy-MM-dd");
        string dob2 = tbEndDate.Text;
        DateTime dt2;
        if (!DateTime.TryParse(dob2, out dt2))
        {
            MessageBox.Show("pls enter valid end date");
            return;
        }

        string format2 = dt2.ToString("yyyy-MM-dd");
     }

5 个答案:

答案 0 :(得分:5)

不要使用DateTime.Parse。请改用DateTime.TryParse。结果是一个布尔值,如果解析成功,则返回true。

<强>更新 根据您的评论中的要求:

DateTime dv;
if(!DateTime.TryParse(dob,out dv)){
   MessageBox.Show("Please enter a valid date");
   return;
}
....

Cleary,你也可以使用Parse并捕获异常,但这样做会很糟糕。最好使用TryParse。我只检查了一个日期值。您可以根据需要扩展逻辑。希望这有帮助。

答案 1 :(得分:1)

这是因为当您访问Text属性时,空文本框返回空字符串,如果传递空字符串,则DateTime.Parse()将抛出该异常。

答案 2 :(得分:0)

使用string.IsNullOrEmpty(tbStartDate.Text)检查其是否为空白。

我建议您使用DatetimePicker选择日期,这将为您返回有效的DateTime值,您可以将其用于进一步处理

答案 3 :(得分:0)

你必须像这样使用Datetime.TryParse

if(!DateTime.TryParse(dob))

答案 4 :(得分:0)

我建议您使用try catch block来捕获FormatException,这样如果用户没有以正确的格式输入日期,它将捕获异常并给出您选择的消息

try
{
    string dob = tbStartDate.Text;
    DateTime dv = DateTime.Parse(dob);
    string format1 = dv.ToString("yyyy-MM-dd");
    string dob2 = tbEndDate.Text;
    DateTime dt2 = DateTime.Parse(dob2);
    string format2 = dt2.ToString("yyyy-MM-dd");
}
catch (System.FormatException)
{
    MessageBox.Show("pls enter valid date format");
}

使用DateTimePicker始终是一种更好且用户友好的方法