在标签

时间:2016-12-14 07:15:24

标签: vb.net controls tabcontrol tabpage

当用户选择不同的标签页时,我尝试在3个标签页中移动3个控件。它们是工具区控件,richtextbox控件和组合框控件。

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

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

在我读这篇文章之前没有这样做过 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仍然为空。我不确定我尝试的是我想做的事情,但我明白,对于这种方法,我根本不应该使用设计器,而只是在代码处理大小和位置时创建控件我。如果有"权利"请提供建议。这样做的方式,主要是为了保持代码简洁。 TIA。

ps。当我写这篇文章时,我意识到我可以在设计器中为每个标签页创建每个控件中的三个,然后使用我想到的字符串收集方式处理组合框更改。似乎足够明智,但我仍然想知道这一点,因此我仍然在问这个问题。

1 个答案:

答案 0 :(得分:2)

以下是在标签之间移动时移动控件的可能解决方案 它确实假设您的控件已经创建过一次。

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