从另一个窗体向TabControl添加选项卡

3

这让我很困扰,如果有可能的话,我将非常感激您的帮助。

我是一名C#开发人员,但必须在VB.NET中完成此任务。

因此,也接受C#答案。

  • 我在表单上有一个选项卡控件。该控件尚未具有任何选项卡。

  • 当表单加载时,它会加载一个“起始”页面。它添加选项卡“tbpStart”,并在选项卡页“frmStart”上加载一个表单。

  • 在此起始页面上,我有许多单选按钮。当我单击一个单选按钮时,它应在主表单上加载其他选项卡。

问题是如何从另一个表单向一个表单的选项卡控件添加选项卡?

代码:

主表单加载时:

Try
    'Load the Start Tab
    Dim start As New frmTabStart
    AddTabPage("Start", start)
Catch ex As Exception
    PMComponentLibrary.PMMessageBox.ShowErrorMessage("Error occurred while trying to load the from.", ex)
End Try

主表单上的功能:

Public Sub AddTabPage(tabPageName As String, myForm As System.Windows.Forms.Form)
    Try
        myForm.TopLevel = False
        myForm.Dock = DockStyle.Fill
        myForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None

        Dim NewTab As New System.Windows.Forms.TabPage
        NewTab.Name = "tab" + tabPageName
        NewTab.Text = tabPageName
        NewTab.Controls.Add(myForm)
        tbcMain.TabPages.Add(NewTab)
        myForm.Show()
    Catch ex As Exception
        Throw ex
    End Try
End Sub

当我在“开始表单”上单击一个单选按钮时,它将在click_event上执行以下操作:
If sender Is rdbWIPPostings Then

    entity = New frmTabEntity()
    mainForm.AddTabPage("Step 1", entity)
    Application.DoEvents()
    dte = New frmTabDate()
    mainForm.AddTabPage("Step 2", dte)

    wipSelect = New frmTabWIPSelect()
    mainForm.AddTabPage("Step 3", wipSelect)

    finish = New frmTabFinish()
    mainForm.AddTabPage("Finish", finish)

End If

但选项卡没有被添加到主表单中。我做错了什么吗?

你在这里从哪里得到了 mainForm - Mike Perrenoud
1
你在Startform的构造函数中将mainForm作为byRef传递了吗?还是从其他地方获取了mainForm。我猜测mainform的引用与屏幕上看到的引用不同。 - Rui
在子窗体(frmStart)中,我实例化了MainForm以便能够调用它的方法:AddTabPage()。在frmStart上,Mainform是这样实例化的:Private mainForm As New frmReportWizardNew()。 - Fred
@FrederikMoller 你是在说frmStart比mainForm先启动吗?还是反过来? - Edper
这是相反的情况。MainForm首先被加载。它是一个正常的showdialog。在主窗体的load事件中,正如您所看到的,它调用AddTabPage方法,然后在那里添加和实例化frmStartup。我想从frmStartup添加更多选项卡,这些选项卡应该出现在MainForm上。此时,frmStartup已经在MainForm的一个选项卡中。 - Fred
显示剩余4条评论
1个回答

1

修改 frmTabStart 的构造函数,接收一个 mainForm 实例,如下:

public frmTabStart(MainForm mainForm)
{
    // store that in a field
}

然后当您需要添加选项卡时:

_mainForm.AddTabPage(...);

这就是解决方法...遗憾的是我没有先尝试这个...谢谢@Neoistheone - Fred
@FrederikMoller,没问题!我很高兴能够帮助你! - Mike Perrenoud

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接