c#定时器控制-很好的实践

本文关键字:很好 定时器 控制 | 更新日期: 2023-09-27 18:16:33

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

方法:

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

因此,每次勾选,该方法被调用并检查文本框是否为空。

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

c#定时器控制-很好的实践

我不会使用这些方法。
我总是捕获TextChanged事件的文本框和SelectedIndexChanged的组合框和调用检查例程从那里,启用或禁用按钮。

基本上,如果你把所有的事件发送到
private void Something_Changed(object sender, EventArgs e)
{
    createButton.Enabled = 
        !String.IsNullOrEmpty(firstNameText.Text) &&
        !String.IsNullOrEmpty(lastNameText.Text) &&
        !String.IsNullOrEmpty(descriptionText.Text);
}

你做。

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

就像其他人说的,使用验证事件——它们的存在是有原因的。

如果你想在一个地方做所有的验证,那也可以,只要有一个大的"CheckValidation()"方法,并从每个TextChanged事件调用,或者在你觉得需要重新验证的地方。

是否有不能使用textchanged事件的原因?

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.textchanged.aspx

如果您实际上没有做任何特定的验证,最好将当前代码移动到createButton单击事件处理程序中,如果它们为空,则弹出消息

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

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

你应该

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

  • 一旦文本框或组合框的值被改变

我们对使用计时器样式的功能有各种要求。然而,我们一直在避免定时器组件。相反,我们使用石英服务器。石英。. NET是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统。

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