C#计时器控制 - 良好的做​​法?

时间:2011-12-01 11:21:30

标签: c# winforms validation timer

我正在构建一个基本上有很多用户输入,文本框,组合框等的应用程序。我遇到了涉及输入验证的问题,基本上我的解决方案是调用一个方法(检查文本框输入) timer.tick方法。

方法:

    private void AllowCreate()
    {
        if (firstNameText.Text == String.Empty || lastNameText.Text == String.Empty
             || descriptionText.Text == String.Empty)
        {
            createButton.Enabled = false;
        }
        else
        {
            createButton.Enabled = true;
        }
    }

所以每个tick,调用该方法并检查文本框是否为空。

我的问题是:以这种方式使用计时器,好的做法?如果没有,是否有更有效的方法来完成我想要做的事情?感谢。

6 个答案:

答案 0 :(得分:4)

我不会使用这些方法 我总是捕捉TextBoxes的TextChanged事件和ComboBoxes的SelectedIndexChanged并从那里调用检查例程,启用或禁用按钮。

基本上,如果您将所有活动发送到

private void Something_Changed(object sender, EventArgs e)
{
    createButton.Enabled = 
        !String.IsNullOrEmpty(firstNameText.Text) &&
        !String.IsNullOrEmpty(lastNameText.Text) &&
        !String.IsNullOrEmpty(descriptionText.Text);
}

你已经完成了。

答案 1 :(得分:3)

使用计时器可以创建一个稍微奇怪的用户体验,因为我可以更改字段,然后是下一个字段,然后突然我在第一个字段上得到验证错误,我修复但是错误不会消失而。将timout设置得更短有助于此,但在没有任何变化时不必要地增加负载。

与其他人所说的一样,使用验证事件 - 它们是有原因的。

如果你想在一个地方进行所有验证,那也没关系,只需要一个大的“CheckValidation()”方法并从每个TextChanged事件中调用,或者在你认为需要重新验证的地方调用。

答案 2 :(得分:2)

答案 3 :(得分:1)

这不是正确的方法,因为它会不必要地验证输入

你应该

  • 当用户在文本框或组合框中执行需要值的操作时,验证输入。例如,用户按下保存按钮。验证输入。如果他们是正确的,否则告诉 用户错误

  • 在文本框或组合框的值更改后验证

答案 4 :(得分:1)

如果您实际上没有进行任何特定验证,最好将当前代码移至createButton点击事件处理程序,如果它们为空,则弹出一条消息。

如果字段为空,则不继续执行代码并通知用户而不是在计时器中检查(用户可能正在喝咖啡:))

答案 5 :(得分:-1)

我们有各种要求使用计时器式功能。但是我们一直避免使用Timer组件。相反,我们使用Quartz Server。 Quartz.NET是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统。

Quartz确实是一个功能强大的库,但是对于简单的要求,Timer API可以节省时间,使您不必将不必要的复杂性放入系统中。如果您没有很多需要安排的任务,并且在设计过程中执行时间众所周知(且不可更改),您应该考虑使用Timer API。在这些情况下,您不必担心由于关闭或崩溃而导致某些任务丢失。对于更复杂的需求,Quartz是一种优雅的调度解决方案。