Hi William,
I was just shicked to discover that the TabInfo entity object does not expose a Parent property! Surprising.
It does expose a ParentId property, so one could use the TabController to retrieve the entity object associated with this value. However, a more immediate solution is to use the BreadCrumbs collection, which is an ArrayList of all TabInfo objects in the tab hierarchy.
Code would look something like this:
CType(DotNetNuke.Entities.Portals.PortalController.GetCurrentPortalSettings().ActiveTab.BreadCrumbs(1), DotNetNuke.Entities.Tabs.TabInfo).TabName (Where 1 is your desired level index)
Or, if you're able to use Linq:
DotNetNuke.Entities.Portals.PortalController.GetCurrentPortalSettings().ActiveTab.BreadCrumbs.Cast(Of DotNetNuke.Entities.Tabs.TabInfo)().ElementAt(1).TabName
Finally, if you have the relevant import/using statements, you can omit the explicit namespace qualifiers:
PortalController.GetCurrentPortalSettings().ActiveTab.BreadCrumbs.Cast(Of TabInfo)().ElementAt(1).TabName
... which is a pretty expressive statement.
Note that the indexers are zero-based. My use of the index=1 above assumes a page at level 2 or greater. You could easily substitute other qualifiers (such as First() or ActiveTab.Level - 1) for a more robust solution... and you probably should!
Hope this helps!
Brandon