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;
}
}
因此,每次勾选,该方法被调用并检查文本框是否为空。
我的问题是:以这种方式使用计时器是好的做法吗?如果没有,有没有更有效的方法来完成我想做的事情?谢谢。
我不会使用这些方法。
我总是捕获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是一个优雅的调度解决方案。