none
TextBox格式化问题 RRS feed

  • 问题

  • 首先是从上一个控件Key_Press事件跳到TextBox中,用来输入日期的。但TextBox的格式,我希望是“yyyyMMdd”。我写了一个带string类型的参数的IsDate验证方法,参数用来接收TextBox的输入内容,之后验证是否满足"yyyyMMdd"格式,不满足提示。满足跳到下一个控件。我用的是Convert.toDateTime(datetiem).toString("yyyyMMdd").没戏呢~

    public static bool IsDate(string datetime) 
            {
                if (string.IsNullOrEmpty(datetime))
                {
                    return false;
                }
                else 
                {
                    try
                    {
                        //这里怎么写呢?
                    }
                    catch (Exception)
                    {
                        return false;
                    }
                }
            }

    2012年2月23日 1:37

答案

  • 可以用DateTime.TryParseExact来避免ParseExact在转换失败时抛出异常的性能开销。


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    2012年2月23日 19:38
    版主
  • private void button3_Click(object sender, EventArgs e)
    {
    	MessageBox.Show(IsDate("20120102").ToString()); //true
    	MessageBox.Show(IsDate("2012/01/02").ToString()); //false
    }
    public static bool IsDate(string datevalue)
    {
    	bool result = false;
    	if (!string.IsNullOrEmpty(datevalue))
    	{
    		try
    		{
    			DateTime.ParseExact(datevalue, "yyyyMMdd", null);
    			result = true;
    		}
    		catch (Exception)
    		{
    			 
    		}
    	}
    	return result;
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年2月23日 4:47
  • 非常感谢~~~不过我用的是DateTime.TryPrase,直接获取文本框内容,之后判断是否为DateTime类型。对于我这种菜鸟来说,先学会用最笨的方法,之后再用大家推荐的。再次感谢2位。
    2012年2月24日 1:05

全部回复

  • private void button3_Click(object sender, EventArgs e)
    {
    	MessageBox.Show(IsDate("20120102").ToString()); //true
    	MessageBox.Show(IsDate("2012/01/02").ToString()); //false
    }
    public static bool IsDate(string datevalue)
    {
    	bool result = false;
    	if (!string.IsNullOrEmpty(datevalue))
    	{
    		try
    		{
    			DateTime.ParseExact(datevalue, "yyyyMMdd", null);
    			result = true;
    		}
    		catch (Exception)
    		{
    			 
    		}
    	}
    	return result;
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年2月23日 4:47
  • 可以用DateTime.TryParseExact来避免ParseExact在转换失败时抛出异常的性能开销。


    The following is signature, not part of post
    Please mark the post answered your question as the answer, and mark other helpful posts as helpful, so they will appear differently to other users who are visiting your thread for the same problem.
    Visual C++ MVP

    2012年2月23日 19:38
    版主
  • 感謝 Sheng Jiang 蒋晟大!

    private void button1_Click(object sender, EventArgs e)
    {
    	MessageBox.Show(IsDate("20120102").ToString()); //true
    	MessageBox.Show(IsDate("2012/01/02").ToString()); //false
    	MessageBox.Show(IsDate("").ToString()); //false
    	MessageBox.Show(IsDate("123").ToString()); //false
    }
    public static bool IsDate(string datevalue)
    {
    	bool result = false;
    	if (!string.IsNullOrEmpty(datevalue))
    	{
    		//DateTime.ParseExact(datevalue, "yyyyMMdd", null);
    		DateTime parseDT;
    		result = DateTime.TryParseExact(datevalue, "yyyyMMdd", null, System.Globalization.DateTimeStyles.None, out parseDT);
    	}
    	return result;
    }


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/

    2012年2月23日 22:52
  • 非常感谢~~~不过我用的是DateTime.TryPrase,直接获取文本框内容,之后判断是否为DateTime类型。对于我这种菜鸟来说,先学会用最笨的方法,之后再用大家推荐的。再次感谢2位。
    2012年2月24日 1:05