在标签页之间移动控件

Moving controls among tabpages

当用户选择不同的标签页时,我试图在 3 个标签页之间移动 3 个控件。它们是一个工具提示控件、一个富文本框控件和一个组合框控件。

richtextbox 和 combobox 将根据所选的标签页为其某些属性分配新值,工具条应该相同,但它的方法(它是典型的字体样式处理工具条)应该影响 richtextbox仅在当前标签页可见。

现在,因为更改组合框的显示值也意味着当前标签页上的富文本框将为其文本分配一个新值 属性,我不想创建 3 个组合框和适合各种场合的 50 个富文本框。我只想创建其中的一组,并在使用引发事件之前将它们的值保存在某种类型的字符串集合中,即更改组合框显示的项目或更改标签页。

在我阅读这篇文章之前没有这样做过 http://www.vbforums.com/showthread.php?478602-2005-Move-controls-From-One-Tab-Page-To-Another 建议为它的场合创建一个控件,这对我来说似乎很荒谬...

我目前的情况是,我通过设计器让控件显示在 tabpage1 上,然后我尝试了这样的操作

Private Sub TabPage_Enter(sender As Object, e As EventArgs) Handles TabPage1.Enter, TabPage2.Enter, TabPage3.Enter
    Select Case DirectCast(sender, TabPage).Name

        Case "Tabpage1"
            TabPage1.Controls.Add(RichTextBox1)
            TabPage1.Controls.Add(ToolStrip1)
            TabPage1.Controls.Add(ComboBox1)

        Case "TabPage2"
            TabPage2.Controls.Add(RichTextBox1)
            TabPage2.Controls.Add(ToolStrip1)
            TabPage2.Controls.Add(ComboBox1)

        Case "TabPage3"
            TabPage3.Controls.Add(RichTextBox1)
            TabPage3.Controls.Add(ToolStrip1)
            TabPage3.Controls.Add(ComboBox1)

    End Select
End Sub

现在,当更改选项卡时,控件会出现在 tabpage2 和 tabpage3 上,但 tabpage1 仍然是空的。我尝试在表单加载事件中这样做

TabPage1.Controls.Add(RichTextBox1)
TabPage1.Controls.Add(ToolStrip1)
TabPage1.Controls.Add(ComboBox1)

但当改回其视图时,tabpage1 仍然是空的。我不确定我正在尝试的是我想做的,但我知道对于这种方法我根本不应该使用设计器,而是只在代码处理大小和位置上自己创建控件。如果有 "right" 方法,请指教,主要是为了保持代码简洁。 TIA.

ps.As 我在写这篇文章时意识到我只能在设计器中为每个标签页创建三个每个控件,然后使用我想到的字符串收集方式处理组合框更改。看起来很明智,但我仍然想知道这个,所以我仍然在问这个问题。

这是一个可能的解决方案,可以让您在选项卡之间移动控件 它确实假设您的控件已经创建了一次。

Private Sub TabControl1_Click(sender As Object, e As EventArgs) Handles TabControl1.Click

    Try

        Dim tabCtrl As TabControl = DirectCast(sender, TabControl)
        Dim tabPageItem As TabPage = tabCtrl.SelectedTab
        moveControl(MobileButton, tabPageItem)

    Catch ex As Exception

        MessageBox.Show(String.Concat("An error occurred:", ex.Message))

    End Try

End Sub

Private Sub moveControl(controlToMove As Control, newTab As TabPage)

    Dim findButton() As Control = newTab.Controls.Find(controlToMove.Name, True)

    If findButton.GetUpperBound(0) < 0 Then

        controlToMove.Parent = newTab

    End If

End Sub