代码之家  ›  专栏  ›  技术社区  ›  Levi

在所有文本框实际填充之前,是否必须显示每个选项卡?

  •  0
  • Levi  · 技术社区  · 8 年前

    我有一个vb。net窗体,该窗体跨多个不同选项卡使用多个文本框。在其中一个选项卡中,我有一个子组选项卡。“我的保存”功能为每个选项卡调用存储过程,并循环遍历每个页面上的值以执行更新或“添加新”。我注意到,在测试时,一些页面不会保存或更新文本框中的任何值。经过几天的调查,我意识到,如果我编辑了一些东西,然后在其他选项卡上单击,所有这些都会正确保存/更新。如果我不点击它们,它们不会全部保存。有什么我不知道的原因吗?当你输入一个搜索值时,我在页面中循环并同时填充所有页面,所以我假设它在物理呈现之前写下了这些值。。。我想我错了?

    1 回复  |  直到 8 年前
        1
  •  1
  •   TnTinMn    8 年前

    TabPage documentation Remarks section

    在显示选项卡页之前,不会创建选项卡页中包含的控件,并且在显示选项卡页之前,不会激活这些控件中的任何数据绑定。

    因此,您的问题的答案是“是的,必须显示选项卡页”。

    然而,“显示”的定义有待解释。实际上,您需要做的就是设置 TabPage.Visible 属性到 True 而不是实际循环并显示每个 TabPage

    窗体的递归扫描 选项卡页 控件将起作用:

    Private Shared Sub TabPagesVisible(parent As Control)
        For Each c As Control In parent.Controls
            If TypeOf c Is TabPage Then c.Visible = True
            TabPagesVisible(c)
        Next
    End Sub
    

    示例用法:

    Sub SaveFormTabData()
        TabPagesVisible(Me) ' Me refers to the containing form
        ' code to save control data
    End Sub