如何始终在TabControl的当前活动选项卡上显示控件?

时间:2010-08-11 12:38:37

标签: vb.net

我有一个带有两个标签的标签控件。两个选项卡都有对它们唯一的控件,但有一个控件我希望始终显示在当前活动的任何选项卡上。

我想我只需要向TabControl1_SelectedIndexChanged()添加一些代码。

我试过

MyControl.Parent = TabControl1.TabPages(
                           TabControl1.TabPages.IndexOf(TabControl1.SelectedTab))
      MyControl.Parent.Update()   ' is this necessary? 

我也试过

TabControl1.TabPages(
 TabControl1.TabPages.IndexOf(TabControl1.SelectedTab)).Controls.Add(SeMyControl)

但两个都没有用(控件移动一次,但当我回到原始标签时,控件没有出现在那里。

谷歌发现有人建议

TabControl1.TabPages(TabControl1.TabIndex).Controls.Add(MyControl)

但由于控件永远不会从旧标签中删除,因此看起来很狡猾,因此重复切换可能会多次添加控件。

我觉得我很亲密,但不是很......我该怎么做?

2 个答案:

答案 0 :(得分:1)

使用您关注的第二个代码段,因为它不会将其从原始标签中删除,为什么不在将其添加到新标签页之前将其从原始标签中删除?

可能是这样的:TabControl1.TabPages(TabControl1.TabIndex).Controls.Remove(MyControl)

答案 1 :(得分:1)

不,这可以正常工作,因为Controls.Add()更改了Parent属性。这会自动将其从之前的标签页中删除。控件实例只能有一个父级。

更直接的方法是简单地将控件放在标签页上,但将其作为较低Z顺序的表格的父级,因此它始终位于标签控件的顶部。唯一的问题是设计师会麻烦你。当您将控件移动到选项卡控件的顶部时,它会自动将控件吸入选项卡页面。解决这个问题的一个技巧是将它从选项卡控件中删除,并在表单构造函数中更改其Location属性。