所有
我在应用程序中有一个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才能看到它。如果我能看到它并进行测试,那么测试总是有效的。如果我看不到它并运行测试,我运行的第一个测试将不会触发该事件。 ...寻呼Heisenberg博士......
这几乎就好像控件必须首先通过更改值或在屏幕上显示来初始化...我完全迷失了这个。这是我见过的最不寻常的行为。在我开始使用变量来表示表单并将Load事件代码放入表单构造函数之前,一切都运行良好。
任何人都可以帮忙,或者至少让我摆脱痛苦吗? SH
----------------------------------------------- ---------------编辑#2
我试图消除一些行为的可变性之后才进行了测试。但我想确认之前所述的行为。
我打开程序并读取文件。此文件包含应触发事件处理程序的值。在不使控件可见的情况下,我可以在不触发事件的情况下更改选项卡控件的SelectedIndex属性。
我再次关闭程序,然后重新打开它。这次,选择允许子选项卡(我关注的事件)的父选项卡变为可见。然后我在父控件中选择了一个不同的选项卡,这意味着子控件不再可见。当我像以前一样打开相同的文件时,它会触发该事件。
我很想实现一个标志,确认控件已重新绘制或是否显示了父标签。如果未设置标志,我可能必须在代码中触发事件。
我想重申,当程序通过类名称引用表单时,一切都有效,并且表单上的控件安排大部分都是在load事件中完成的。现在程序创建变量,控件的排列在表单的构造函数中完成。我确定这与我遇到的问题有关,但我无法理解。有分享的智慧吗?
答案 0 :(得分:0)
MyForm.tbsForm.SelectedIndexChanged = ValueReadFromFile
没有多大意义。是否试图为SelectedIndexChanged事件分配处理程序?或者是ValueReadFromFile选项卡的名称?
你所说的是你有两个标签控件,比如A和B.标签控件B包含在A的标签内,除非A选择了包含标签控件B的标签页,否则为SelectedIndexChanged如果以编程方式更改其选项卡,B的事件将不会触发?
您尝试在子选项卡控件中选择一个选项卡,以及此代码何时执行?以何种方式?