如何使用户窗体的属性在其实例调用之间保留值



我有一个用户表单,其中包含应保持其状态的控件。这个论坛上有人教我VBA中的用户表单应该像对待类一样对待。那么,如何使它在实例调用之间保持其值呢?我想做正确的编码,避免全局变量。这个论坛上的另一位开发者也教过我这一点。在这里,我试图让uf保持所做的选择:

Private Sub UserForm_Initialize()
Static Schalter As Boolean
Me.ToggleButton1 = Schalter
End Sub

公共与静态

这是有效的。为什么它不应该是正确的?

用户窗体1

Option Explicit
Private Sub ToggleButton1_Click()
Schalter = ToggleButton1.Value
Debug.Print "ToggleButton1 = " & Schalter
End Sub
Private Sub UserForm_Initialize()
Me.ToggleButton1 = Schalter
Debug.Print "Userform Initialize Schalter = " & Schalter
End Sub

模块1

Option Explicit
Public Schalter As Boolean

基本问题是您可能正在创建新实例,这将重置值。您实际想要做的是抓住实例,在隐藏和显示之间切换。这样,同一个实例就会显示出仍然记得的值。

如果你只需要一个实例,这很好,但如果你需要多个实例,或者如果你不想一直带着那个实例,那么你需要做的就是将模型从视图中分离出来。严格来说,Schalter在任何方面都与表单无关——这只是操作布尔值的UI,对吧?因此,将其视为一个模型,并将模型提供给表单(也称为视图),然后您可以轻松地忽略表单实例,并且仍然拥有所需的数据。如果你决定展示这个表单(甚至可能是一个不同的表单),你已经有了所有设置的模型。

这种模式将在很大程度上保持代码的干净和良好的分离。阅读模型视图演示者模式。这里有一个关于这个主题的博客,可能会有所帮助。

最新更新