Zum Inhalt springen

Abbruch durch ein Formular


SSchäfer

Empfohlene Beiträge

Moin,

nach langer zeit hab ich mal wieder ein Problem. und zwar:

ich kann im hauptfenster ein unterfenster öffnen. das läuft auch ohne probleme. jedoch sobald ich vorher auf den button OK gedrückt habe u danach auf den Button Abbrechen klicke, "hängt" sich das Programm auf. Habe es auch schon mit einer try-catch-methode versucht um die Exception aufzufangen.

anliegend habe ich mal den besagten Teil des Gesamtcodes gepostet. hoffe ihr könnt mir helfen.


        private void AddNewTemplate()

        {

            // hier wird die Vorlagenbox geladen


            Inboxes frm = new Inboxes();


            if (frm.ShowDialog() == DialogResult.OK)

            {

                foreach (PASUser pu in CachedTemplates)

                {

                    if (pu.SID.Equals(frm.Value))

                    {

                        MessageBox.Show("Vorlagename bereits vergeben!", "Vergleich", MessageBoxButtons.OK, MessageBoxIcon.Warning);


                        // Wird neu eingegeben


                        AddNewTemplate();

                    }

                  }


                // Benutzer "ItemType" direkt anlegen;


                PASUser newTemplate = PASUser.GetInstanceWithNewGuid<PASUser>(); // wird eine neue GUID erstellt/vorlage

                //newTemplate.ItemType = ItemType.Template; // Aufzählung

                newTemplate.SID = frm.Value;     // wird angelegt

                newTemplate.ItemType = ItemType.Template; // Aufzählung

                newTemplate.Shortcut = frm.Value;


                //neues Template mit in die gecachten aufnehmen


                // [COLOR="Red"]ACHTUNG ab hier tritt die Fehlermeldung ein [/COLOR]


                    _cachedTemplates = null;


                        UserSrv.Insert(newTemplate);

                  }



                    //newTemplate.SID = null;


                    fillUsertree();


                // Hier werden die Rollen 

                //treeViewTemplates.Nodes.Add(newTemplate.Guid, newTemplate.SID);


                WatchedList<UserRole> currentRoles = nodes2UserRoleList(newTemplate.Guid, lastClientGuid, newTemplate);


                //Gibt eine Liste der zur Zeit im Fassadentreeview angehakten Rechte zurück


                WatchedList<String> currentRolesList = new WatchedList<String>();

            }


                // für das Schließen des Eingabefensters für Vorlagen

            else

            {

                this.changes = false;

                this.Close();


            }


        }

:new

Link zu diesem Kommentar
Auf anderen Seiten teilen

Habe es auch schon mit einer try-catch-methode versucht um die Exception aufzufangen.
Moment. Hängt sich das Programm auf, oder tritt eine Exception auf? Das schließt sich gegenseitig aus.

Und um welche Exception handelt es sich genau?

// Wird neu eingegeben

AddNewTemplate();

Hier wird nicht nur "neu eingegeben". Ich weiß nicht, ob du dir dessen bewusst bist, aber du hast hier keine einfache Wiederholung, sondern eine Rekursion. Die Funktion fängt durch diesen Aufruf nicht nur einfach wieder von vorn an. Dieser Aufruf bewirkt einen vollständigen Durchlauf von AddNewTemplate, und danach wird der Rest des ersten Aufrufs weiter abgearbeitet. Insbesondere also auch der Teil, der nach diesem Aufruf steht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

halllo,

mein problem hat sich dank euch und langem experimentier doch noch gelöst.


 private void toolStripButton2_Click(object sender, EventArgs e)

        {

            AddNewTemplate();

        }


        private void AddNewTemplate()

        {

            // hier wird die Vorlagenbox geladen


            TemplateInputbox frmTemplatebox = new TemplateInputbox();


            if (frmTemplatebox.ShowDialog() == DialogResult.OK)

            {

                //Gibt es die Vorlage bereits?

                foreach (User pu in CachedTemplates)

                {

                    //Wenn ja, dann raus hier  

                    if (pu.SID.Equals(frmTemplatebox.Value))

                    {

                        MessageBox.Show("Vorlagename bereits vergeben! Bitte anderen Namen wählen.", "Vergleich", MessageBoxButtons.OK, MessageBoxIcon.Warning);

                        return;

                    }

                }

                // Benutzer "ItemType" direkt anlegen;

                User newTemplate = User.GetInstanceWithNewGuid<User>();

                newTemplate.ItemType = ItemType.Template;

                newTemplate.Shortcut = frmTemplatebox.Value;

                newTemplate.SID = frmTemplatebox.Value;

                newTemplate.ItemType = ItemType.Template;



                //und in der DB speichern

                UserSrv.Insert(newTemplate);


                //damit die gecachten Templates beim nächsten Zugriff erneut geladen werden...

                _cachedTemplates = null;


                //und Baum neu aufbauen

                fillUsertree();


                //Gibt eine Liste der zur Zeit im Fassadentreeview angehakten Rechte zurück

                WatchedList<UserRolle> currentRoles = nodes2UserRoleList(newTemplate.Guid, lastClientGuid, newTemplate);


                // Hier wird das neue Dictionary für die Rollen angelegt und allen Rollen hinzugefügt

                Dictionary<string, WatchedList<UserRolle>> dicTemplateRoles = new Dictionary<string, WatchedList<UserRole>>();

                dicTemplateRoles.Add(lastClientGuid, currentRoles);

                cachedUserRoles.Add(newTemplate.Guid, dicTemplateRoles);


            }

            //für das Schließen des Eingabefensters für Vorlagen

            else

            {

                this.changes = false;

                frmTemplatebox.Close();

            }

        }

thx.

:new

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...