SSchäfer Geschrieben 30. April 2008 Teilen Geschrieben 30. April 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 5. Mai 2008 Teilen Geschrieben 5. Mai 2008 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
SSchäfer Geschrieben 13. Mai 2008 Autor Teilen Geschrieben 13. Mai 2008 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.