2010-12-20 176 views
0

全部,TabControl.SelectedIndex被更改,但SelectedIndexChanged甚至没有触发

我在开始行为奇怪的应用程序中有一个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事件代码放入窗体构造函数之前,所有工作都完美无缺。

任何人都可以帮助,或至少让我摆脱我的苦难吗? SH

-------------------------------------------- ------------------编辑#2
我只是在试图消除行为中的一些变化之后进行了测试。但我想确认之前所说的行为。

我打开程序并读取文件。该文件包含一个应该触发事件处理程序的值。在不使控件可见的情况下,我可以在不触发事件的情况下更改Tab控件的SelectedIndex属性。

我再次关闭程序,并重新打开它。这一次,选择允许子标签(我所关注事件的标签)变为可见的父标签。然后我在父控件中选择了一个不同的选项卡,这意味着子控件不再可见。当我像以前一样打开同一个文件时,它解雇了这个事件。

我很想实现一个标志,确认控件已被重新绘制或者是否显示父标签。如果标志没有设置,我可能不得不在代码中触发事件。

我想重申,一切工作时,方案中提及的形式通过其类名和多对窗体控件的安排是在​​负载情况下完成的。现在程序创建变量,控件的排列在窗体的构造函数中完成。我确信这与我遇到的问题有关,但我无法理解。有什么智慧可以分享?

回答

0
MyForm.tbsForm.SelectedIndexChanged = ValueReadFromFile 

没有什么意义。是否尝试将处理程序分配给SelectedIndexChanged事件?或者是ValueReadFromFile选项卡的名称?

什么你说的是,你有两个标签控件,也就是说,A和B选项卡控制含有B A的标签内,除非A有一个包含标签控件B中选择该标签页面中, B的SelectedIndexChanged事件不会触发,如果您以编程方式更改其选项卡?

在其不同的方式你试过选择子选项卡控件中的选项卡,正在执行这段代码是什么时候?

+0

的ValueReadFromFile是从一个文件中的值,在这种情况下0或1,你是正确的,它应该读“...... tbsForm.SelectedIndex = ValueReadFromFile”我的坏。 – Superhuman 2010-12-22 20:56:52

+0

是的,它会显示B的SelectedIndexChanged事件不会正确触发。如果我显示包含选项卡B的A选项卡,则每次都会触发。如果不首先显示,它将仅触发第2至第n次。我很困惑。 – Superhuman 2010-12-22 21:00:59

+0

我曾尝试使用“tbsForm.SelectedIndex = SomeValue”和“tbsForm.TabPages(SomeValue).Select”两者都无济于事。这些语句在包含它们的表单的构造函数中执行。我在显示启动画面时执行构造函数,因为我在窗体上需要很长时间才能加载。当我将这些语句作为表单的Load事件的一部分执行时,一切正常,但只有在大控件完全加载之前,表单才会显示大约一半并且无响应。 – Superhuman 2011-01-12 05:49:30

相关问题