2011-02-15 86 views
0

我刚刚接触Windows编程,就像我以前的工作一样,我主要参与了Web技术,并且主要在后端。我继承了一个Winforms应用程序,并且我最大的噩梦之一是浏览表单可以处于的无限状态。管理表单状态的更好方法是什么?

为了举一个例子,表单具有状态“新建”和“编辑”,具体取决于是否用户决定添加或编辑记录。在这种形式上,我们有逻辑。如果这个texbox有一个特定的值,那么这些其他文本框就被禁用了,等等。这导致了这些规则的无限链接。所以,文本框的TextChanged事件会影响另一个字段。它反过来会触发改变其他控件状态的X事件。它很快就会陷入一个无法维持的纠结混乱。

必须有更好的方法...解决这个问题的简单而优雅的东西。有什么建议么?

回答

1

我所做的是使用一种叫做FormatControls()的方法。在这个方法中,我实现了所有的逻辑,如myTextbox.Enabled = mycheckBox.Checked等等。我在我的事件处理程序中调用了这个方法,例如在检查过的变化等等。我也在适当的时候调用它(即,新加载的没有数据的表单,从数据库加载的记录等)。这对我来说很合适很多年了,它使一切都变得不复杂。

你是对的,如果你没有使用模式,它可能会变成一个太复杂的东西。

0

您可以尝试使用Application.Idle事件来执行启用禁用逻辑并将此部分与业务逻辑部分隔离。

+0

这可能被认为更“松散耦合”,但有可能将CPU固定在100%。 – Reinderien 2011-02-15 14:53:56

+0

@Reinderien如果你不在内部执行代价昂贵的循环,你的CPU不会填充任何代价高昂的负载,只是因为这个事件是由Windows的旧消息循环引发的。 – 2011-02-15 14:58:20

+0

我不知道我明白这一点。每当整个应用程序闲置时,Application.Idle事件都不会启动?如果应用程序中有很多表单会怎么样?我需要弄清楚当前显示哪些窗口,然后执行必要的逻辑? – tardomatic 2011-02-16 06:13:37

0

根据您对表单上的控件的不同,您可能可以取消单独的文本框和添加/删除按钮,并用DataGrid替换整个作品。

相关问题