文本框错误捕获消息框显示延迟

时间:2016-09-13 13:43:16

标签: c#

我有一个文本框,它进行数学计算,我不希望它处理小数点,所以我使用int作为类型,我添加一个错误捕获异常,显示一个消息框。我希望消息框上有一个延迟计时器,这样人们就可以有时间在使用MouseMove事件进行计算时更改值。

     catch (FormatException fEX)
             { 
       Message.Box("Value must be a divisisable by 1 exactly")

不,我不想使用像

这样的东西

(x%1)== 0只想在上面的消息框中设置延迟计时器

2 个答案:

答案 0 :(得分:1)

我同意@ CodeCaster的评论,即消息框不是向用户传达无效输入的最佳方式,但以下是如何做到的:

//declare DateTime lastErrMsg = DateTime.MinValue; at your class level
catch (FormatException fEX)
{ 
    if (DateTime.Now - lastErrMsg > TimeSpan.FromSeconds(30)) //or whatever TimeSpan value
    {
        Message.Box("Value must be a divisisable by 1 exactly")
        lastErrMsg = DateTime.Now;
    }
}

答案 1 :(得分:1)

使用计时器。在您的catch中,不要执行错误消息,而是创建Timer对象。向该计时器的已用事件添加一个处理程序,该处理程序仅在值仍然无效时才显示该消息。

catch (FormatException fEX)
{
    if (MyFormatExcTimer == null) {
        MyFormatExcTimer = new Timer(1000);
        MyFormatExcTimer.elapsed += async ( sender, e ) => await HandleTimer();
        MyFormatExcTimer.start();
    }
}

private static Task HandleTimer()
{
    if (... format is still bad ...)
    {
        Message.Box("Value must be a divisisable by 1 exactly");
    } else {
        MyFormatExcTimer.Stop();
    }
    MyFormatExcTimer.Dispose();
    MyFormatExcTimer = null;
}

这不是很完整。您可能需要在不同的事件中创建或处置或启动或停止计时器,但是如果没有看到更多的代码,则很难说清楚。我可能实际上没有让程序在输入错误时触发异常,但接受任何输入并拥有自己的代码来测试它。我的代码会在任何文本更改事件中被触发,并且如果输入错误则可以启动计时器,或者如果输入正常则停止它。 此外,您可能会考虑在输入过程中甚至不触发任何消息,而是在用户尝试保存数据时触发验证数据...但是假设您有一个“保存”按钮或类似的东西,您可能不会。