多个表单与具有多个启动的单个表单

时间:2015-09-07 09:34:34

标签: vb.net forms vba

这个问题在很长一段时间里都在困扰着我,比如enviroment(vb,vba等)。

什么是更好的编程实践:有多个表单,每个表单都有相同的布局(按钮,字段等),但每个表单都做了一些不同的事情,或创建一个单独的表单,每次加载不同情况必须使用不同的SQL查询加载不同的数据集吗?

我将举出以下例子来澄清上述情况。

我有两种类型的用户。 User1和User2。它们都可以打开表单,但第一个用户(User1)必须只读,而第二个用户(User2)可以对数据进行更改。这两种方法的形式是否更好,加载时检查user1或user2是否打开它并相应地禁用或启用fieds,或者同一事物有两种不同的形式但是form1默认禁用了字段,默认情况下启用表单2控件。

上述情况非常简单,我认为答案是单一形式。但如果情况更复杂怎么办? (某些字段必须启用一个,其他字段必须启用另一个,不同的sql查询,用户之间的不同数据类型等)

1 个答案:

答案 0 :(得分:2)

如果只是以几种不同的方式配置相同的行为,我会想出创建一个配置结构来描述字段是否应该是可见的(希望链接到您的业务模型) )。

你的代码就像这样(VB.Net):

Public Structure UserConfiguration
    Public Dim IsAdministrator As Boolean
    '...
End Structure

Public Class UserForm
    Public Sub New(ByVal configuration as UserConfiguration)
        SearchTextBox.Enabled = configuration.IsAdministrator
    End Sub
End Class

然后将其称为

Dim config as New UserConfiguration()
config.IsAdministrator = true
Dim form as new UserForm(config)
form.Show()

但是如果您认为可能存在一些场景,其中您的表单的行为会有所不同,那么您应该提出inheritance

Public Class BaseForm
   'Some code common for all forms that will inherit from this one
End Class

Public Class AdministratorForm
    Inherits BaseForm
     Public Sub New()
        SearchTextBox.Enabled = True
        MsgBox("Hello, I am an administrator!")
    End Sub
End Class

总而言之,经验法则是坚持DRY principle。如果您知道您的表单将共享相同的代码但仍然存在行为差异,则您不希望将代码复制粘贴两次。