Zeliran ידידי!
הרשה לי לנחש: בדוגמה שצירפת, ה-nodes שאתה מוסיף מוצגים רק כשאתה מריץ את האפליקציה אח"כ... יש אצלך בעיה בהבנה של איך הדברים פועלים, ולכן גם הבעיה שלך קורית. בדוט נט, כל טופס הוא בעצם קלאס שיורש מ-System.Windows.Forms.Form. כל מופע של מחלקת הטופס מהווה מופע של הטופס על המסך. מה שאתה עשית, זה הגדרת טופס כלשהו, נגיד - טופס א', עם כפתור להוספת nodes לעץ שבטופס ב'. טופס א' מאתחל מופע של טופס ב', וטוען לעץ שמוגדר במחלקה כלשהי, בצורה סטאטית, את המידע ששמרת ע"י serialisation. טופס ב', בעת איתחולו, טוען לעץ שעליו את אותו המידע.
טעות ראשונה: העץ שהוגדר כסטאטי מהמחלקה השניה לא נחוץ כלל, העץ שייך לטופס שמציג אותו. אם אתה מחליט כבר להשאיר אותו, לשם המטרה הלימודית, אז למה שתטען מחדש מהקובץ אם כבר יש לך את המידע בעץ אחר? למה לא להעביר ממנו? בעת לחיצה על כפתור הוספת הצומת (node) לעץ בטופס א', אתה מבצע את הפעולה הבאה: 1. ייצור instance חדש של טופס ב'. 2. הוספת הצומת לעץ שבמחלקה הסטאטית, ושמירה. 3. ניקוי העץ בטופס ב' - במופע החדש שהגדרת. 4. טעינה מהקובץ, שאליו שמרת לפי העץ הסטאטי. 5. היפטרות מהטופס שייצרת. בשלב הזה נשארת עם המופע של טופס ב' שייצרת בהתחלת הריצה של התוכנית שלך.
טעות שנייה: כשאתה מייצר instance חדש של הטופס, הוא
לא קשור למופעים הקיימים של הטופס. כל פעולה שאתה מבצע עליו לא תחול גם על הטופס הקיים.
פיתרון הבעיה את המשתנה שאיתו אתה מגדיר את המופע של טופס ב' בתחילת הריצה תגדיר כמשתנה private של מחלקת טופס א', וכשאתה רוצה לבצע עליו את הפעולה, תפנה אליו - ולא דרך הגדרת מופע חדש וטיפול בו. אני גם הייתי מוותר על העץ הסטאטי, כי אפילו שהוא שם למטרה לימודית (כפי שאני משער), אין בו שום טעם, והוא סתם תופס זיכרון. חוץ מזה, מדוע אתה עובד במצב Release ולא Debug, כשעוד יש לך בעיות בתוכנה?