Announcement

Collapse
No announcement yet.

kein Close mehr nach Dispose von MdiChilds

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • kein Close mehr nach Dispose von MdiChilds

    Hallo, ich habe ein seltsames Verhalten in meinem Program.
    Um die Sprache zur Laufzeit zu wechseln (Controls und Labels kommen aus XML Dateien) gehe ich hin und dispose alle MdiChilds sodass sie danach neu aus den XMLs gelesen werden müssen.

    [highlight=vb.net]
    For Each f As System.Windows.Forms.Form In Me.MdiChildren
    f.Dispose()
    Next
    [/highlight]

    Das funktioniert noch nicht reibungslos, ist aber momentan nicht meine größte Sorge. Mehr Kummer bereitet mir die Tatsache, das wenn ich einmal die Sprache verändert habe, der Close-Befehl scheinbar ins leere läuft.

    Hab ich nix verändert läuft mein Programm nach dem Close-Befehl durch ein, vom Windows Form Designer generiertes, Dispose. Hab ich was geändert, kommt es dort nicht an.

    Hat jemand eine Idee, woran das liegt?

  • #2
    in meinem Code gibt es eine Closing-Methode, welche bei jedem Versuch mein Programm zu schließen auch gefeuert wird. Bei näherer Betrachtung habe ich jetzt festgestellt, dass sie im oben beschriebenen Fall IMMER ein e.Cancel = true übergeben bekommt.
    Ich habe keine Ahnung, woher das kommt, denn ich setze e.Cancel nie auf true.

    Ich bin dann hingegangen und habe e.Cancel von Hand auf false gesetzt, aber das hatte nur zur Folge, das mein Programm sich zwar geschlossen hat, aber irgendein Prozess weiterhin vorhanden war, sodass sich das ganze nicht mehr kompilieren ließ, bis ich VS neu gestartet hab.

    Wenn irgendjemand eine Idee hat, wie ich dem Problem auf die Pelle rücken kann...ich bin für alles dankbar.

    Comment


    • #3
      wenn ich kein Close() die "alten" MdiChildren mache, dann kann lässt sich mein Programm schließen, aber ich finde, das ist sehr unsauber, da ja alle Formulare weiterhin existieren. Lediglich werden die "neuen" über die "alten" projeziert.
      Entsprechend vergrößert sich der Array MdiChildren, in dem alle Child-Formulare gespeichert werden.

      Das sieht dann nach 3 x Sprache wechseln schon so aus:

      Code:
      -		me.MdiChildren	{Length=12}	System.Windows.Forms.Form()
      +		(0)	{MyProg.frm_MsgLine}	System.Windows.Forms.Form
      +		(1)	{MyProg.Frm_Tree}	System.Windows.Forms.Form
      +		(2)	{MyProg.frm_Toolbar}	System.Windows.Forms.Form
      +		(3)	{MyProg.FC_Adress}	System.Windows.Forms.Form
      +		(4)	{MyProg.frm_MsgLine}	System.Windows.Forms.Form
      +		(5)	{MyProg.Frm_Tree}	System.Windows.Forms.Form
      +		(6)	{MyProg.frm_Toolbar}	System.Windows.Forms.Form
      +		(7)	{MyProg.FC_Adress}	System.Windows.Forms.Form
      +		(8)	{MyProg.frm_MsgLine}	System.Windows.Forms.Form
      +		(9)	{MyProg.Frm_Tree}	System.Windows.Forms.Form
      +		(10)	{MyProg.frm_Toolbar}	System.Windows.Forms.Form
      +		(11)	{MyProg.FC_Adress}	System.Windows.Forms.Form

      Comment


      • #4
        ich habe eine Lösung gefunden.
        Wenn ich den Container (MdiClient) komplett wegwerfe und dann neu erstelle, dann funktioniert auch wieder das Close der Mainform und ich habe auch nicht tausend Instanzen meiner Formulare.

        [highlight=vb.net]
        Me.Controls.Clear()
        Me.Controls.Add(New MdiClient)
        [/highlight]

        Comment

        Working...
        X