kostenloser Webspace werbefrei: lima-city


C# alle Forums außer Form1 schließen

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    christian1603

    Kostenloser Webspace von christian1603

    christian1603 hat kostenlosen Webspace.

    Hallo LC,
    ich möchte alle Forms auslesen uns schlißen (außer Form1).
    Form f = Application.OpenForms["Form1"];
                foreach (Form form in Application.OpenForms)
                {
    
                    if (form != f)
                    {
                       form.Close();
                    }
                }

    Aber leider stürzt der script ab?

    HELP
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo christian1603,

    steht in der Name-Eigenschaft Deiner Form1 auch 'From1' drin?
    Wenn nicht, dann liefert Application.OpenForms["Form1"] wahrscheinlich null zurück, was dazu führt, dass alle Fenster geschlossen werden.
    Probiere mal Folgendes:
    Form f = Application.OpenForms["Form1"];
    if(f == null)
    {
        MessageBox.Show("Form1 nicht gefunden.");
    }
    else
    {
        foreach (Form form in Application.OpenForms)
        {
            if (form != f)
            {
                form.Close();
            }
        }
    }
    Wenn die MessageBox kommt, dann musst Du vorher irgendwo
    f.Name = "Form1";
    machen, wobei f eine Instanz von Form1 sein muss.

    Edti:
    Und falls das Programm doch anderweitig abstürzt, dann wäre die Meldung interessant.

    Beitrag zuletzt geändert: 19.3.2011 16:09:24 von darkpandemic
  4. Autor dieses Themas

    christian1603

    Kostenloser Webspace von christian1603

    christian1603 hat kostenlosen Webspace.

    darkpandemic schrieb:
    Hallo christian1603,

    steht in der Name-Eigenschaft Deiner Form1 auch 'From1' drin?
    Wenn nicht, dann liefert Application.OpenForms["Form1"] wahrscheinlich null zurück, was dazu führt, dass alle Fenster geschlossen werden.
    Probiere mal Folgendes:
    Form f = Application.OpenForms["Form1"];
    if(f == null)
    {
        MessageBox.Show("Form1 nicht gefunden.");
    }
    else
    {
        foreach (Form form in Application.OpenForms)
        {
            if (form != f)
            {
                form.Close();
            }
        }
    }
    Wenn die MessageBox kommt, dann musst Du vorher irgendwo
    f.Name = "Form1";
    machen, wobei f eine Instanz von Form1 sein muss.

    Edti:
    Und falls das Programm doch anderweitig abstürzt, dann wäre die Meldung interessant.


    Danke schonmal.
    Das Programm stürzt immer noch ab "Die Auflistung wurde geändert. Der Enumerationsvorgang kann möglicherweise nicht ausgeführt werden." es stürzt aber erst ab wenn mehr als nur eine (Form1) Form offen ist.
  5. Hallo christian1603,

    dann liegt es am foreach. Weil jedesmal, wenn Du ein Formular schließt, natürlich auch die Application.OpenForms-Collection geändert wird.
    Um das zu umgehen kannst Du folgendes versuchen:
    Form f = Application.OpenForms["Form1"];
    if(f == null)
    {
        MessageBox.Show("Form1 nicht gefunden.");
    }
    else
    {
        for(int i = Application.OpenForms.Count-1; i >=0; i--)
        {
            if(Application.OpenForms[i] != f)
                Application.OpenForms[i].Close();
        }
    }

    Die Schleife geht von oben nach unten, da sich die Anzahl der Elemente in der Liste mit jedem Form.Close() erniedrigt.
  6. Autor dieses Themas

    christian1603

    Kostenloser Webspace von christian1603

    christian1603 hat kostenlosen Webspace.

    darkpandemic schrieb:
    Hallo christian1603,

    dann liegt es am foreach. Weil jedesmal, wenn Du ein Formular schließt, natürlich auch die Application.OpenForms-Collection geändert wird.
    Um das zu umgehen kannst Du folgendes versuchen:
    Form f = Application.OpenForms["Form1"];
    if(f == null)
    {
        MessageBox.Show("Form1 nicht gefunden.");
    }
    else
    {
        for(int i = Application.OpenForms.Count-1; i >=0; i--)
        {
            if(Application.OpenForms[i] != f)
                Application.OpenForms[i].Close();
        }
    }

    Die Schleife geht von oben nach unten, da sich die Anzahl der Elemente in der Liste mit jedem Form.Close() erniedrigt.



    EIN WEITERES DICKES DANKE!
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!