多页与选项卡条
多页是具有“页面”的对象。每个页面都可以保存它自己的控件集合,然后可以直接或通过包含的页面对象引用这些控件。
选项卡条是带有“选项卡”的对象。与“页面”对象不同,选项卡没有自己的控件。相反,有only原始控件,对所有“选项卡”可见。
程序差异
由于多页的每个页面都有一组不同的控件,因此需要很少的内务处理。页面的选择会影响哪些控件可见,并且控件会自动保留分配给它们的值(如预期)。
对于选项卡条,因为只有initial一组控件,代码中需要进行大量内务处理。选项卡条的选择不会自动影响控件中的值。相反,控件充当would如果它们根本不在选项卡栏中,这是可以预料的。
标签条解决方案
设置一个可用于保存控件的各种值的变量(数组、集合、字典)。然后,在TabStrip_Change()
事件,存储以前的值,并重置新选项卡的控件(或填写新选项卡上次保存的值)。
我建议添加一个用户表单级别变量Dim old_tab as Long
您可以将其设置为末尾的当前页面TabStrip_Change()
事件。 (这对于检索正确选项卡之前填充的值非常有用)。
对于我的示例代码,我将使用数组。但是,由于数组在改变长度方面不太灵活,因此如果需要,您还可以考虑使用字典或集合。
对于下图所示的用户窗体,以下代码使单个文本框的行为就像每个选项卡有一个不同的文本框一样。每当选项卡条发生更改时,它还会保存这些值。 (注意:如果您随后使用保存的值进行计算,请记住首先更新当前选项卡条的值。)
Option Explicit
Dim old_tab As Long
Dim textValues As Variant
Private Sub TabStrip1_Change()
textValues(old_tab) = TextBox1.Value 'Saves the old value
TextBox1.Text = textValues(TabStrip1.Value) 'Updates value to reflect tab change
old_tab = TabStrip1.Value 'updates tab # variable
End Sub
Private Sub UserForm_Initialize()
ReDim textValues(0 To TabStrip1.Tabs.Count - 1) 'tabs are zero-based, so count is always one more than the maximum tab value
old_tab = TabStrip1.Value 'Ensures that the first value will be saved to correct location at the tab change
End Sub