Hallo zusammen,
ich habe verschiedenste Popup-Formulare, die immer wieder aufgerufen werden und aus XML-Dateien generiert werden. Um jetzt nicht jedesmal die XMLs neu zu lesen, bin ich hingegangen und habe die Formulare in einer Hashtable gespeichert, wo mein Programm sie sich herausfischt, wenn sie schon vorhanden sind, anderfalls wird das XML gelesen.
Nun öffne ich Formular1, das XML wird gelesen, Formular wird in Hashtable gespeichert, alles funktioniert.
Jetzt öffne ich Formular2, das XML wird gelesen, Formular wird in Hashtable gespeichert, alles funktioniert.
Nun öffne ich wieder Formular1, das Formular wird aus Hashtable gelesen. Hier funktioniert nun keiner der Buttons mehr.
Die Eventhandler werden fehlerfrei generiert, das konnte ich schon nachvollziehen. Dennoch sind die Buttons tot.
Wenn ich den Teil mit der Hashtable weglasse und die Formulare jedes mal neu aus dem XML lese, funktioniert alles ohne Probleme.
Hat jemand eine Idee, woran das liegen kann?
[highlight=vb.net]
Public Shared Function Create(ByVal PFName As String, ByVal Parent As Object, ByVal typ As Type, Optional ByVal objektArt As String = Nothing) As FrmMyProjectBearbeiten
Dim fBearbeiten As FrmMyProjectBearbeiten = Nothing
Dim popName As String = PFName
If Not objektArt Is Nothing Then
Dim popBearbeiten As FrmMyProjectBearbeiten = typ.InvokeMember(typ.FullName, BindingFlags.CreateInstance, Nothing, New Object, Nothing)
popName = popBearbeiten.CreatePopName(objektArt, PFName)
'popBearbeiten = Nothing '## Speicherbeich der Instanz wieder freigeben, da diese hier nicht mehr benötigt wird.
End If
'' gibt es schon ein Hashtable? Wenn "Nein" wird eines erzeugt
If htblGeoeffneteDialoge Is Nothing Then
htblGeoeffneteDialoge = New Hashtable()
End If
fBearbeiten = htblGeoeffneteDialoge.Item(popName)
' wenn das Popup noch nicht im Hashtable existiert, wird es neu angelegt
If fBearbeiten Is Nothing Then
fBearbeiten = typ.InvokeMember(typ.FullName, BindingFlags.CreateInstance, Nothing, New Object, Nothing)
F_ReadMSKDatei(popName, fBearbeiten) '## Formularstruktur aus XML lesen
fBearbeiten.Width = fBearbeiten.AllgProps.DefWidth
fBearbeiten.Height = fBearbeiten.AllgProps.DefHeight
fBearbeiten.Text = F_GetDialogName(popName)
htblGeoeffneteDialoge.Add(popName, fBearbeiten)
End If
If Not Parent Is Nothing Then fBearbeiten.Herkunft = Parent
Return fBearbeiten
End Function
[/highlight]
ich habe verschiedenste Popup-Formulare, die immer wieder aufgerufen werden und aus XML-Dateien generiert werden. Um jetzt nicht jedesmal die XMLs neu zu lesen, bin ich hingegangen und habe die Formulare in einer Hashtable gespeichert, wo mein Programm sie sich herausfischt, wenn sie schon vorhanden sind, anderfalls wird das XML gelesen.
Nun öffne ich Formular1, das XML wird gelesen, Formular wird in Hashtable gespeichert, alles funktioniert.
Jetzt öffne ich Formular2, das XML wird gelesen, Formular wird in Hashtable gespeichert, alles funktioniert.
Nun öffne ich wieder Formular1, das Formular wird aus Hashtable gelesen. Hier funktioniert nun keiner der Buttons mehr.
Die Eventhandler werden fehlerfrei generiert, das konnte ich schon nachvollziehen. Dennoch sind die Buttons tot.
Wenn ich den Teil mit der Hashtable weglasse und die Formulare jedes mal neu aus dem XML lese, funktioniert alles ohne Probleme.
Hat jemand eine Idee, woran das liegen kann?
[highlight=vb.net]
Public Shared Function Create(ByVal PFName As String, ByVal Parent As Object, ByVal typ As Type, Optional ByVal objektArt As String = Nothing) As FrmMyProjectBearbeiten
Dim fBearbeiten As FrmMyProjectBearbeiten = Nothing
Dim popName As String = PFName
If Not objektArt Is Nothing Then
Dim popBearbeiten As FrmMyProjectBearbeiten = typ.InvokeMember(typ.FullName, BindingFlags.CreateInstance, Nothing, New Object, Nothing)
popName = popBearbeiten.CreatePopName(objektArt, PFName)
'popBearbeiten = Nothing '## Speicherbeich der Instanz wieder freigeben, da diese hier nicht mehr benötigt wird.
End If
'' gibt es schon ein Hashtable? Wenn "Nein" wird eines erzeugt
If htblGeoeffneteDialoge Is Nothing Then
htblGeoeffneteDialoge = New Hashtable()
End If
fBearbeiten = htblGeoeffneteDialoge.Item(popName)
' wenn das Popup noch nicht im Hashtable existiert, wird es neu angelegt
If fBearbeiten Is Nothing Then
fBearbeiten = typ.InvokeMember(typ.FullName, BindingFlags.CreateInstance, Nothing, New Object, Nothing)
F_ReadMSKDatei(popName, fBearbeiten) '## Formularstruktur aus XML lesen
fBearbeiten.Width = fBearbeiten.AllgProps.DefWidth
fBearbeiten.Height = fBearbeiten.AllgProps.DefHeight
fBearbeiten.Text = F_GetDialogName(popName)
htblGeoeffneteDialoge.Add(popName, fBearbeiten)
End If
If Not Parent Is Nothing Then fBearbeiten.Herkunft = Parent
Return fBearbeiten
End Function
[/highlight]
Comment