如何在TabControl中访问添加到TabPage的自定义UserControl - C# - ?

时间:2016-03-22 23:01:53

标签: c#

我有一个名为MainAreaTab的类,它继承自UserControl。

在另一个用户控件(称为Page3)中,我有一个包含TabPages的TabControl,每个TabPages都包含一个MainAreaTab。这是我执行此操作的代码,它可以正常工作:

string mainAreaString = mData.GetMainAreaName((UInt32)mainAreaId);
MainAreaTab myUserControl = new MainAreaTab(mData, (uint)mainAreaId);
TabPage mainAreaTabPage = new TabPage(mainAreaString);//Create new tabpage
mainAreaTabPage.Controls.Add(myUserControl);
mTabControl.TabPages.Add(mainAreaTabPage); 

正如我所说,这项工作很好。当我想在每个TabPage中访问每个MainAreaTab的公共方法时,问题出现了。我尝试过类似的东西,但它不起作用:

foreach (TabPage tabPage in mTabControl.TabPages)
{
  TabControl userControl = (TabControl)tabPage.Controls[0];
  MainAreaTab tab = userControl as MainAreaTab;
}

我得到的错误是:

  

无法通过引用转换,装箱转换,取消装箱转换,换行转换或空类型转换将类型'System.Windows.Forms.TabControl'转换为'MainAreaTab'。

我错过了什么吗?可以这样做吗?提前谢谢。

2 个答案:

答案 0 :(得分:3)

另一个选择是使用LINQ一次性抓取所有MainAreaTab的所有TabPage控件。

var mainAreaTabs = mTabControl.TabPages.Cast<TabPage>()
                              .SelectMany(pg => pg.Controls.OfType<MainAreaTab>());

然后循环遍历这个集合:

foreach (var tab in mainAreaTabs)
    tab.SomeMethod();

答案 1 :(得分:2)

查看您的代码,我相信您想尝试以下内容:

foreach (TabPage tabPage in mTabControl.TabPages)
{
    MainAreaTab tab = tabPage.Controls[0] as MainAreaTab;
}

这是做什么的:

foreach TabPage in TabControl
    get the TabPage's MainAreaTab