2016-03-22 7 views
0

Ich habe eine Klasse namens MainAreaTab, die von UserControl erbt.Wie kann ich auf ein benutzerdefiniertes Benutzersteuerelement zugreifen, das einer TabPage in einem TabControl hinzugefügt wurde - C# -?

In einem anderen Benutzersteuerelement (namens Page3) habe ich ein TabControl, das TabPages enthält, und jedes TabPages enthält ein MainAreaTab. Dies ist der Code, wo ich das mache und es funktioniert gut:

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); 

Wie gesagt, das funktioniert gut. Das Problem tritt auf, wenn ich auf eine öffentliche Methode jedes MainAreaTab in jedem TabPage zugreifen möchte. Ich habe versucht, so etwas, aber es does't Arbeit:

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

Der Fehler, den ich bekommen ist:

Kann nicht Typ ‚System.Windows.Forms.TabControl‘ auf ‚MainAreaTab‘ über eine Referenz konvertieren Konvertierung, Box-Konvertierung, Unboxing-Konvertierung, Wrapping-Konvertierung oder Null-Typ-Konvertierung.

Fehle ich etwas? Kann das gemacht werden? Danke im Voraus.

+0

Es scheint mir, dass Sie 'MainAreaTab tab = (MainAreaTab) tabPage.Controls [0] wollen;'. Probieren Sie das aus und sehen Sie, ob es hilft. – Enigmativity

Antwort

2

Eine weitere Option ist LINQ zu verwenden, greifen alle MainAreaTab Kontrollen von allen TabPage ist in einem Rutsch.

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

Dann Schleife durch die Sammlung wie folgt aus:

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

Danke. Das hat wirklich geholfen :) – chincheta73

+0

Gern geschehen @ Chincheta73. –

2

auf den Code der Suche, ich glaube, Sie folgendes versuchen:

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

Was das bedeutet ist:

foreach TabPage in TabControl 
    get the TabPage's MainAreaTab 
Verwandte Themen