在模块中声明要在整个程序中使用的变量然后以一种形式填充它们并使用另一种形式的这些变量填充这些变量是不错的做法?
我计划在将数据填充到变量后关闭填充表单,因此我认为这是唯一可行的方法。
我是否认为在这种情况下将参数从填充表格传递到显示形式是不合适的,如果可能的话?
答案 0 :(得分:1)
我猜你的应用程序取决于以及你所谈论的数据类型。
考虑登录后保存用户信息的User Login form
。然后,您可以将此信息保存在整个应用程序中共享的模块中,因为预计会话期间不会更改。因此,您可以快速查看所有程序表单中的权限,角色和用户名。
另一方面,如果您正在查询数据库,您可能会要求提供最新的数据,并且您在使用的特定表单中执行此操作,而无需在程序中的其他表单中共享它。 / p>
答案 1 :(得分:1)
...另一方面,模块无法做任何事情,也无法通过类完成。对于UserLogin示例,将其保留在模块中不会使访问更容易:
Friend User As New UserLogin
' elsewhere:
theName = User.Name
thePass = User.Password
同时,课程可以管理信息:
Class UserLogIn
Sub LoadData
Sub SaveData
Function GetLogIn ' display form, validate ID etc
Function ChangePassword
Private gfrm as New LogInForm
Friend Sub Display()
With gfrm
.IgnoreChange = True
.cboName.Text = Name
.cboName.Tag = Name
.txtURL.Text = Location
.txtUser.Text = UserName
.txtPW.Text = DES.DecryptData(_pass)
.txtHint.Text = PassHint
.txtNote.Text = Comment
.IgnoreChange = False
.DataChanged = False
.Show
End With
' store PW hashed or encrypted until needed...
' No one can change the PW except this class
Friend Property PassWord() As String
Get
Return DES.DecryptData(_pass)
End Get
Private Set(ByVal value As String) ' private setter
_pass = DES.EncryptData(value)
End Set
End Property
End Sub
模块根本不容易使用,维护,存储或访问数据。他们的力量要小得多。
答案 2 :(得分:0)
不,是的。 定义一个或多个类来保存数据,传递一下。如果你通过模块来表示其中一个带有一堆原始类型的.bas事物,那么除非没有实际的选择,否则这将被认为是不好的做法。
预计不会改变你所说的,但是如果你使用一堆全局变量,你可以预期它们会被改变,并且很难追踪,何时以及为什么。
它们会被更改,因为它很方便,或者出错,最终会出现间歇性的主要PIA错误。一个带有getter和setter的类的属性,它可以管理对它的成员的更改,所以如果一些“傻瓜”的程序员犯了一个小错误.. 另一个考虑因素是单元测试,如果按照你的想法行事,这将是一场噩梦。