这是我的代码:
canvas
如果我从小时删除1个号码,那么它可以正常工作,但如果我删除两个号码e.x.我想从11改为22然后它崩溃了。那么如何让表格private void textBox1_TextChanged(object sender, EventArgs e)
{
DateTime myDate = DateTime.ParseExact(textBox1.Text, "yyyy-MM-dd H:m:s",
System.Globalization.CultureInfo.InvariantCulture);
TimeChangedHandler(myDate);
}
适用于所有情况?谢谢!
答案 0 :(得分:2)
如果您想表明日期/时间无效,请使用DateTime.TryParseExact
检查是否有效,而不会抛出异常。使用返回值(true / false)来确定有效性。
基本上,在用户编辑时,您不应期望该值始终有效 - 就像我编辑代码时一样,它不会总是在语法上正确。
当您实际使用值时,您需要检查它是否有效 - 在此之前,可能只需添加一个可视标记来表明它无效。
您可能想要考虑一下,只要提供的日期/时间有效,您的TimeChangedHandler
(无论是什么)都应该隐式触发,或者您的UI是否应该提供更明确的"使用此值&#34 34;动作(例如按钮)。
另外,请考虑使用DateTimePicker
作为选择日期和时间的更友好方式。
最后,我个人避免使用H:m:s
的模式...日期部分看起来像ISO-8601,所以我建议使用HH:mm:ss
完成有效性 - 例如,2015-07-27 7:55:5
的值是奇数(IMO)。
答案 1 :(得分:0)
您可以使用DateTime.TryParse方法检查日期的两种格式:
private void textBox1_TextChanged(object sender, EventArgs e)
{
DateTime myDate = default(DateTime);
if(!DateTime.TryParseExact(textBox1.Text, "yyyy-MM-dd H:m:s",
System.Globalization.CultureInfo.InvariantCulture, out myDate))
DateTime.TryParseExact(textBox1.Text, "yyyy-MM-dd HH:mm:ss",
System.Globalization.CultureInfo.InvariantCulture, out myDate)
if(myDate == default(DateTime)) return; // or
// throw new ArgumentException("your text here");
TimeChangedHandler(myDate);
}
答案 2 :(得分:0)
在用户编辑时,您不应期望该值始终有效 - 就像我编辑代码时一样,它不会始终在语法上正确。
这个代码需要放在try catch中,因为你想要像这样的灵活值
private void textBox1_TextChanged(object sender, EventArgs e)
{
try
{
DateTime myDate = DateTime.ParseExact(textBox1.Text, "yyyy-MM-dd H:m:s",System.Globalization.CultureInfo.InvariantCulture);
TimeChangedHandler(myDate);
}
catch (Exception ex)
{}
}
因此,如果用户输入的值不正确并考虑使用DateTimePicker作为选择日期和时间的更友好方式,则不会爆炸。
答案 3 :(得分:-1)
由于它位于TextChanged
事件处理程序上,您可能希望在实时编辑过程中尝试添加try...catch
处理。
try
{
DateTime myDate = DateTime.ParseExact(textBox1.Text, "yyyy-MM-dd H:m:s",
System.Globalization.CultureInfo.InvariantCulture);
TimeChangedHandler(myDate);
}catch( Exception ex )
{
//Catch exception
}
虽然更好的解决方案是将其置于不同的事件上。灵活的编辑是否意味着实时编辑?如果是,在此期间将文本从11更改为22可能会导致格式发生变化,因此ParseExact
最好放在不同的事件上。