使用模块处理表单类元素是否正确?

时间:2013-01-22 20:20:33

标签: .net vb.net winforms

我在表单类 A 中有一个Private Sub Modify()来处理按钮或标签的行为(两者都属于同一个 A 类)。 让我们说这样做:

Private Sub Modify()
    btnFoo.Enabled = True
    lblBar.Text = "labelbar"
 End Sub

如果我将Private Sub Modify()从表单类A移动到模块B并将其命名为Public Sub Modify,我只需更改相同按钮或标签的行为即可:< / p>

Public Sub Modify()
    A.btnFoo.Enabled = True
    A.lblBar.Text = "labelbar"
End Sub

但考虑到模块是某种静态元素,这是否会有所帮助? 我想知道这个方法,所以我可以跟上好的做法。

提前致谢。

2 个答案:

答案 0 :(得分:1)

对于模块,类或其他任何东西来说,访问另一个对象的属性几乎从来都不是一个好主意。如果不出意外,它会中断The Law of Demeter。更一般地说,在表单之外的任何东西直接操作任何表单的控件都不是一个好主意。我认为,默认情况下,控制权是公开的,这是令人遗憾的。最好将Modify方法保留在表单上,​​如果需要从表单外部调用它,只需将其设为Public

答案 1 :(得分:1)

如果你走这条路,你最终会有很多模块在很多表格中改变很多东西......如果你想用新功能扩展程序或修复bug,你会讨厌代码的复杂性

更好的规则是:在表格中完成关于表格的所有内容。

为什么您真的想将该代码提取到模块中?是因为你会以多种形式做同样的事情吗?在这些情况下,可能有意义地提取此类代码,但不要让模块知道特定的形式。相反,你可以做

Public Sub Modify(button As Button, label As Label)
    button.Enabled True
    label.Text = "labelbar"
End Sub

并使用

在多种表单中调用它
Private Sub ChangeElements()
    Modify(btnFoo, lblBar)
End Sub

但同样,最好将这些内容留在表格中。