【问题标题】:How can I access a custom UserControl added to a TabPage in a TabControl - C# -?如何访问在 TabControl - C# - 中添加到 TabPage 的自定义 UserControl?
【发布时间】:2016-03-22 23:01:52
【问题描述】:

我有一个名为 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”。

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

【问题讨论】:

  • 在我看来你想要MainAreaTab tab = (MainAreaTab)tabPage.Controls[0];。试试看是否有帮助。

标签: c#


【解决方案1】:

另一种选择是使用 LINQ 一次性从所有 TabPage 中获取所有 MainAreaTab 控件。

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

然后像这样遍历集合:

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

【讨论】:

  • 谢谢。这真的很有帮助:)
【解决方案2】:

看了你的代码,相信你想试试下面的:

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

这是做什么的:

foreach TabPage in TabControl
    get the TabPage's MainAreaTab

【讨论】:

    猜你喜欢
    • 2013-11-23
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多