SSchäfer Geschrieben 30. April 2008 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
Klotzkopp Geschrieben 5. Mai 2008 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.
SSchäfer Geschrieben 13. Mai 2008 Autor 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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden