0

我有一个表单,我正在运行该表单中的所有控件。我的代码没问题,可以获取所有控件及其所有属性。

因此,例如,我有一个 TabControl,每个 tabPage 中有 2 个 TabPages 和 2 个文本框。
问题是对于未选中的tabPage,文本框的可见属性为False,尽管我已将其设置为True。
我试图用 Control.Select 和 Control.Focus 解决这个问题,但 Visible 仍然是 False:

  Private Sub createXML(ByVal cnt As Control, ByVal elem As XElement)
    Try

        cnt.Select()
        cnt.Focus()
        Select Case cnt.Controls.Count
            Case Is = 0
               'Code here to write XElement to an XDocument
                'Check Controls properties
            Case Is > 0
                For Each childCnt As Control In cnt.Controls
                    childCnt.Select()
                    childCnt.Focus()

                    Dim childElem As New XElement(childCnt.GetType.ToString)
                    Select Case childCnt.Controls.Count
                        Case Is = 0
                            'Code here to write XElement to an XDocument
                            'Check Controls properties
                        Case Is > 0
                            createXML(childCnt, childElem)
                       End Select
                Next
        End Select

有任何想法吗?请注意,我不知道每次必须运行哪些控件

4

1 回答 1

1

在这种情况下,您的问题是 TabControl 将所有内容设置为不可见,除非它们存在于当前选定的标签页中。当您更改选项卡时,控件将设置为可见,而以前的控件将消失。那么 tabcontrol 是如何跟踪手动设置为可见 false 的控件,以便在更改选项卡时它不会亮起的呢?好吧,可见属性并不是真正基于布尔值。这只是为我们程序员解释它的一种简单方法。要么你看到它,要么你没有,没有规则要记住或设置搞砸了。可见或不那么简单。

那么你的问题该怎么办。基本上,当我看到这一点时,我的第一个想法是您想要创建一个“打开程序,使其看起来与关闭时相同”的功能。这当然目前无法正常工作,因为您的解析器可能将所有内容设置为可见 = false,这在前面所说的意味着永远不可见。因此在加载时选项卡控制页面更改后不显示。

所以解决方法: 1. 给tab控件中的控件添加一个标签。这样您可以在保存时查找标签。如果存在,请将可见属性设置为 true。(便于您日后维护时理解) 2. 使用反射得到实际可见状态。查看 SO 线程并阅读有关反射的信息:Using control.Visible 如果它位于未选择的标签页上,则返回 False(将来维护时不太容易理解)

于 2012-10-29T13:00:42.747 回答