Ich habe ein
UserControl
in einer DLL. Das UserControl
besitzt eine Public Property „pbMode“
Das
UserControl
wird in seiner .Load
initialisiert, dabei wird pbMode = False
.In meinem Projekt gibt es ein
frm_Main
. Darüber lässt sich ein frm_Sub
öffnen. Auf dem frm_Sub
ist ein TabControl
.Auf der TabPage2 des
TabControls
befindet sich eine Instanz des UserControls
.Folgendes Problem: wird die Instanz von erstellt,
VB.NET-Quellcode
- Dim frm_SubInst As Form
- frm_SubInst = New frm_Sub
- frm_SubInst.WindowState = FormWindowState.Minimized
- frm_SubInst.Show()
- For Each _Ctrl As Control In frm_SubInst.Controls
- If TypeOf _Ctrl Is TabControl Then
- Dim _TabCtrl As TabControl
- _TabCtrl = CType(_Ctrl, TabControl)
- For _i As Integer = 0 To _TabCtrl.TabPages.Count - 1
- _TabCtrl.SelectedIndex = _i
- Next
- _TabCtrl.SelectedIndex = 0
- End If
- Next
geschieht dies über die Designer.vb.
Darin steht auch die Info zum
TabControl
, deren TabPages
und dem darauf befindlichen UserControl
. Dabei wird die Public Property
des UserControls pbMode = False
gesetzt, weil es so im Designer steht.Unmittelbar nach dem Erstellen des
frm_Sub
, startet das .Load
des frm_Setup
. Darin wird die Public Property
des UserControls
pbMode = True
gesetzt.Ich selektiere alle
TabPages
des TabControls
1x durch aus folgendem Grund: ich habe festgestellt, dass die auf den TabPage
befindlichen (User)Controls
NICHT initialisiert wurden, wenn deren zugehörige TabPage
nicht mindestens 1x selektiert war.Beim durchselektieren kommt auch die
TabPage
dran auf der sich das UserControl
befindet. Dadurch startet im UserControl
dessen .Load
. Und wie schon eingangs erwähnt, wird dort pbMode = False
. Damit ist das True
aus frm_Sub.Load
hinfällig.Ich hatte probiert das Initialisieren der
Public Property
statt im .Load
des frm_Sub
in dessen .Shown
auszuführen. Nur ist mir absolut nicht verständlich, wann .Shown
genau ausgeführt wird.Das Problem ist nämlich, dass der Zustand der Public Property auch aus einer Datei kommen kann. D.h. nach dem Laden der
frm_Sub
Instanz wird sofort der Wert von „pbMode“
aus der Datei gelesen und das UserControl
damit gefüttert.Und wenn ich nicht wirklich sicher stellen kann, dass
.Shown
des frm_Sub
VOR dem Laden der Datei ausgeführt wird, würde mir das den zuvor geladenen Wert ja auch wieder überschrieben.Laut MS ist die Reihenfolge der Events ja
.Load
, .Activated
, .Shown
(für das Hauptform). frm_Sub.Activated
wird bei mir aber immer nur dann ausgeführt, wenn ich das Form nach dem Laden anklicke. Also scheint sich das für Sub-Forms auch anders zu verhalten.Lange Rede kurzer Sinn: ich suche nach einer Möglichkeit das
UserControl
erst sicher mittels dessen .Load
zu initialisieren, bevor entweder das frm_Sub
oder die geladenen Datei dies übernimmt.