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

Vb.net 如何始终在TabControl的当前活动选项卡上显示控件?,vb.net,Vb.net,我有一个带有两个选项卡的选项卡控件。这两个选项卡都有它们独有的控件,但有一个控件我希望总是出现在当前处于活动状态的选项卡上 我想我只需要在选项卡control1\u SelectedIndexChanged()中添加一些代码 我试过了 MyControl.Parent = TabControl1.TabPages( TabControl1.TabPages.IndexOf(TabControl1.SelectedTab)) MyC

我有一个带有两个选项卡的选项卡控件。这两个选项卡都有它们独有的控件,但有一个控件我希望总是出现在当前处于活动状态的选项卡上

我想我只需要在
选项卡control1\u 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)
但这看起来很棘手,因为控件从未从旧选项卡中移除,因此重复切换可能会多次添加控件


我觉得我已经很接近了,但还不完全…我该怎么做?

使用您关心的第二个代码段,因为它不会从原始选项卡中删除它,为什么不在将其添加到新选项卡之前从原始选项卡中删除它呢


可能类似于:TabControl1.TabPages(TabControl1.TabIndex).Controls.Remove(MyControl)

否,因为Controls.Add()更改了父属性。这会自动将其从以前的选项卡页中删除。控件实例只能有一个父对象


更直截了当的方法是不将控件放在选项卡页上,而是将其保留为具有较低Z顺序的窗体的父级,因此它始终位于选项卡控件的顶部。唯一的问题是,设计器会麻烦您。当您将控件移到选项卡控件的顶部时,它会自动将控件吸入选项卡页。解决此问题的一个技巧是将其从选项卡控件中删除,并在表单构造函数中更改其Location属性。

+1好的,我会尝试一下并返回给您。棘手的部分是要知道哪个选项卡是旧选项卡,但我可能可以通过MyControl.Parent.Controls.Remove(MyControl)绕过它是的,我明白你的意思了。我想你可以遍历这些选项卡并检查:TabPage.Contains(MyControl)。如果是,则将其删除并添加到新激活的页面中。+1听起来不错,谢谢。我想我可以将其从选项卡控件中删除并在表单构造函数中更改其Location属性,或者根本不在设计器中,而是在表单构造函数中动态构造它。这也没关系,别忘了SetChildIndex()将其向前移动。