全部,
我在一个开始表现异常的应用程序中有一个 TabControl。一些背景...
该程序从 VB6 转换为 VB .NET 2008,并用于使用它们的类名来引用表单。换句话说,我可能有一个名为 frmFoo 的表单类。在该程序的代码中,您可能会看到:
frmFoo.Show()
或者
frmFoo.UserDefinedProperty = True
在最近的一些更改中,我创建了变量来表示我的表单实例,如下所示:
Public MyForm as frmFoo
MyForm = New frmFoo
MyForm.Show()
为此,我还从表单的 Load 事件处理程序中删除了代码,并将其放入表单的构造函数中。
当表单加载时,或者当一个文档被加载并且应该影响 TabControl 的选定索引时,类似下面的内容不一定会触发 SelectedIndexChanged 事件。
MyForm.tbsForm.SelectedIndex = ValueReadFromFile
...或者...
MyForm.tbsForm.Tabs(ValueReadFromFile).Select
很抱歉这么罗嗦,但还有更多。如果我打开表单并查看 TabControl 以验证它是否已正确设置,那么一切都会像预期的那样工作。行为不端的 TabControl 包含在另一个 TabControl 中,因此我必须单击父 TabControl 才能看到它。如果我能看到它并运行测试,那么测试总是有效的。如果我看不到它并运行测试,我运行的第一个测试将不会触发该事件。...寻呼海森堡博士...
几乎就好像必须首先通过更改值或使其在屏幕上可见来初始化控件......我完全迷失了这个。这是我见过的最不寻常的行为。在我开始使用变量来表示表单并将 Load 事件代码放入表单构造函数之前,一切都运行良好。
任何人都可以帮助,或者至少让我摆脱痛苦吗?上海
-------------------------------------------------- ------------ 编辑#2
在尝试消除行为中的一些可变性之后,我刚刚执行了一个测试。但我想确认之前所说的行为。
我打开程序并读取了一个文件。该文件包含一个应该触发事件处理程序的值。在不使控件可见的情况下,我可以在不触发事件的情况下更改选项卡控件的 SelectedIndex 属性。
我再次关闭程序,然后重新打开它。这一次,选择了允许子选项卡(我关心的事件)变得可见的父选项卡。然后我在父控件中选择了一个不同的选项卡,这意味着子控件不再可见。当我打开与以前相同的文件时,它触发了该事件。
我很想实现一个标志,以确认控件已被重新绘制或父选项卡是否已显示。如果未设置标志,我可能必须在代码中触发事件。
我想重申,当程序通过类名引用表单并且表单上的大部分控件排列是在加载事件中完成时,一切正常。现在程序创建变量,控件的排列在表单的构造函数中完成。我确定这与我遇到的问题有关,但我不明白如何。有什么智慧可以分享吗?