2016-03-22 6 views
0

私は、UserControlから継承するMainAreaTabというクラスを持っています。TabControl - C# - でTabPageに追加されたカスタム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のパブリックメソッドにアクセスしたいときに発生します。私はこのような何かをしようとしたが、それは仕事をdoes't:

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

私が手にエラーがある:

タイプを変換できません「System.Windows.Forms.TabControl」「MainAreaTab」に参照を経由して変換、ボクシング変換、アンボクシング変換、ラッピング変換、またはヌル型変換。

何か不足していますか?これはできますか?前もって感謝します。

+0

[0]あなたは 'MainAreaTabタブ=(MainAreaTab)tabPage.Controlsをしたいと私には思えます;'。それを試して、それが役立つかどうかを見てください。 – Enigmativity

答えて

2

別のオプションは、すべてからすべてのMainAreaTabのコントロールをつかむためにLINQを使用することですTabPageは一度に

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

次に、このようなコレクションをループ:

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

ありがとうございます。それは本当に助けました:) – chincheta73

+0

あなたは歓迎です@ chincheta73。 –

2

あなたのコードを見てみると、私はあなたが次のことを試してみたいと考えている:

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

何これが行うことは次のとおりです。

foreach TabPage in TabControl 
    get the TabPage's MainAreaTab 
関連する問題