Vb.net 多个表单与具有多个启动的单个表单

Vb.net 多个表单与具有多个启动的单个表单,vb.net,forms,vba,Vb.net,Forms,Vba,这是一个在每一个类似.net的环境(vb、vba等)中困扰我很长时间的问题 更好的编程实践是什么:使用多个表单,每个表单都有相同的布局(按钮、字段等),但每个表单的工作方式略有不同,或者创建一个表单,每次为不同情况加载表单时,都必须使用不同的SQL查询加载不同的数据集 我将举下面的例子来澄清上述情况 我有两种类型的用户。User1和User2。它们都可以打开表单,但第一个用户(User1)必须以只读方式打开表单,而第二个用户(User2)可以对数据进行更改。在这里,最好为这两个控件都使用相同的表

这是一个在每一个类似.net的环境(vb、vba等)中困扰我很长时间的问题

更好的编程实践是什么:使用多个表单,每个表单都有相同的布局(按钮、字段等),但每个表单的工作方式略有不同,或者创建一个表单,每次为不同情况加载表单时,都必须使用不同的SQL查询加载不同的数据集

我将举下面的例子来澄清上述情况

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


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

如果只是为了以两种不同的方式配置相同的行为,我会创建一个配置结构来描述字段是否应该可见(希望与您的商业模式相关联)

您的代码如下(VB.Net):

然后像这样称呼它

Dim config as New UserConfiguration()
config.IsAdministrator = true
Dim form as new UserForm(config)
form.Show()
但是如果您假设可能存在一系列您的表单行为会有所不同的场景,您可能会想到:


总而言之,经验法则是要坚持。如果你知道你的表单将共享同一段代码,但仍然存在行为差异,你就不想复制粘贴代码两次。

这实际上是一个很好的答案,也是我所希望的!但是我现在还不会接受它,因为我想看看其他人对此的看法如果你同意的话,这是个问题!无论如何,非常感谢!!!
Dim config as New UserConfiguration()
config.IsAdministrator = true
Dim form as new UserForm(config)
form.Show()
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