לא מקפיץ...אז קישור

yuval k

New member
ובכן...

לא, זה לא שכל מורה הוא ArrayList... בוא נתחיל לתכנן את ה-Class שמתאר מורה. לכל מורה יש שם ופרטים אישיים, רשימת מקצועות שהוא מלמד, רשימת הכיתות שהוא מלמד, מערכת שעות (שמקושרת לרשימת המקצועות והכיתות, כך שאין כפילות נתונים) וכו'. כל אחת מהרשימות הללו יכולה להיות מסוג ArrayList.
 

Zeliran

New member
טוב..

אתה יכול לנסות ולהסביר (או לקשר..) איך אפשר ליצור קלאס, שבתוכו יש ArrayList עם נתונים..בזמן ריצה?
 

yuval k

New member
../images/Emo26.gif

את ה-Class אתה כותב, על הפונקציות שבתוכו ומאפייניו, בקובץ הקוד שלך. בזמן ריצה, אתה מייצר instance חדש שלו עם new, שקורא ל-constructor שבו (הפונקציה ששמה כשם ה-Class).
 

Zeliran

New member
טוב.. ועוד קטנה..

כשאני יוצר new, האם אפשר שהשם יהיה הנתון של משתנה?
 

yuval k

New member
כמובן ../images/Emo13.gif

אתה מגדיר שה-constructor שלך מקבל פרמטרים, ואז כשתיצור אותו הוא יבקש ממך את הפרמטר הזה. למשל:
‏string parameter = "blah"; MyObject obj = ‏new MyObject(parameter, "another parameter");​
 

Zeliran

New member
לא לזה התכוונתי..

אני עושה new כל פעם שאני מוסיף מורה למאגר, אז כל פעם אני צריך לשנות את השם..לא? למשל:
classTeacher teacher1 = new classTeacher();​
אבל אם אני אוסיף עכשיו עוד מורה לרשימה, אני אצטרך לשנות את השם teacher1 (אלא אם כן אני טועה?) אז אולי במקום teacher1 אפשר לשים משתנה..שהוא מכיל נתון שמשתנה..
 

yuval k

New member
אה ../images/Emo9.gif אז.. כן, אתה טועה כאן.

בפונקציה שלך שמוסיפה מורה, אתה יכול ליצור את המופע של CTeacher, למלא אותו בנתונים ההכרחיים ולהוסיף אותו למאגר המורים. אין שום משמעות לשם המשתנה במקרה הזה, כי הוא הופך לפריט בתוך המאגר שלך ואתה ניגש אליו לפי דרך הגישה לפריטים ב"מאגר" מהסוג שבחרת (לדוג': במערך - לפי אינדקס מספרי, ב-HashTable לפי המפתח וכו').
 

Zeliran

New member
טוב, ועכשיו לגבי השמירה..

אני משתמש ב serialize, מתי ואיך צריך לשמור את הרשימה של המורים? כל פעם שאני מוסיף מורה? אני צריך לשמור את הרשימה של המורים (קלאסים) והמקצועות שלהם (ArrayList) וככה, כל פעם שאני טופס מסויים..הם יטענו ויוצגו בשני הרשימות.. אזז.. איך אפשר לשמור כל פעם מורה שמתווסף?
 

gilad g

New member
מתי לשמור

זוהי כבר החלטה שלך... ואם אני לא טועה, כבר שאלת את זה, ואמרתי לך בזמנו, שכדאי לשמור כל פעם שהמשתמש לוחץ על save
 

Zeliran

New member
אממ...

הכוונה שמוסיפים מורה חדש לרשימה? ומה בדיוק אמורים לשמור..כי בעצם.. שומרים הכל בקובץ אחד אז איך שומרים את הקשר בין המורה למקצועות?
 

yuval k

New member
לפי אינדקס:

יש לך מערך שמכיל את האינדקס של מקצועות שהמורה מלמד במאגר המקצועות. ..כמו join כזה
בקשר לשמירה: אתה תחליט, לפי הפונקציונליות של האפליקציה שלך...
 

Zeliran

New member
לפי אינדקס? לא הבנתי..

אז נגיד והחלטתי שהתוכנית תשמור כל פעם שיוסיפו מורה חדש לרשימה אז אני צריך לעשות serialize לכל המורים שהיו ברשימה ולמורה החדש אזז... אני צריך ליצור מערך חדש של כל המורים כולל המורה החדש, ואז לעשות למערך serialize? המ... וכשאני טוען מהקובץ, ..איך אני יודע איזה מקצוע מלמד כל מורה?
זה כבר מתחיל להרגיז.. לשאול כל פעם את אותם השאלות..אני לא ממש מצליח להבין את כל העניןן.. כמו שנאמר.. "ארררגגגג!!!"
 

yuval k

New member
אני דיברתי על איך המקצועות שהמורים

מלמדים... יש לך מערך אחד, למשל - של strings, עם המקצועות (באותה מידה זה יכול להיות אובייקט שמאפיין את המקצוע): [מיקום במערך | מקצוע] 0 | "ידיעת הארץ" 1 | "לשון" 2 | "מתימטיקה" וכו' (לגמרי במקרה זו ההתחלה של המערכת שלי
) עכשיו, בתוך CTeacher, יש לך מערך אחר, ששומר בתוכו את המיקומים במערך של המקצועות במערך המקצועות. כשאתה מאחזר את הנתונים, אתה חוזר למצב הזה - ומפה, כדי לקבל את שם המקצוע, למשל - אתה פונה לפי האינדקסים. אולי כדאי שתעבוד על פרוייקט אחר, אם אתה לא מבין את העבודה על הפרוייקט הזה?
 

Zeliran

New member
>>>>

אני אנסה ללכת צעד צעד.. אני אבין מתישהו.. לא? אולי.. יכול להיות.. סביר להניח.. יצרתי קלאס של מורה, הנה הקוד:
using System; using System.Collections; namespace Rush_Hour { public class Teacher { public Teacher() { } ArrayList subs = new ArrayList(); public void addList (string sub) { subs.Add (sub); } private string name; public string Name { get { return name; } set { name = value; } } } }​
הוא מכיל פונקציה אחת להוספת מקצוע לרשימה..ועוד property לשם של המורה יש לי טופס להוספת מורה חדש, ב event של לחיצה על הכפתור save שמתי את הקוד הבא:
subjects = new string[listSub.Items.Count]; string name = txtName.Text; int i; Teacher teacher = new Teacher(); for (i = 0; i<=subjects.Length-1; i++) { teacher.addList(listSub.Items.ToString()); } teacher.Name = name;​

יכול לתת כיוון? (עזוב בינתיים את ה serialize... אלא אם כן חייב לכתוב אותו כאן..)
 

Zeliran

New member
מקסימום...

אני אולי פשוט אוותר על הרשימת מקצועות.. ופשוט תהיה רשימה של השמות של המורים.. אלא אם כן אני אסתדר עם כל הקטע הזה..
 

Zeliran

New member
Control Mirroring

אני מנסה לעשות Mirroring ל ListView קראתי את ההסבר ב MSDN בנושא (צרפתי קישור..) ולא כל כך הבנתי יצרתי קלאס חדש שבו יש את הפרופרטי ופונקציהשל CreateParams אז איך אני מקשר את ה ListView לקלאס? אני אמור לעשות ב Intalize של ה ListView משהו כמו:
classMirror mirror = new classMirror(); mirror.Mirrored();​
(הכוונה לגשת לפרופרטי..) אה.. הסבר?
 

gilad g

New member
פשוט תעשה שהקלאס יירש מ-ListView

ואז הוא בעצם ListView, אבל עם תוספת של Mirroring.
 

Zeliran

New member
אהה.. רגע..

כתבתי את מה שכתוב ב MSDN בתור קלאס חדש.. ושניתי שהוא ירש את ListView אז עכשיו.. יש לי ListView שאני רוצה שהיא תהיה RightToLeft, אז איך אני גורם לה להיות ככה? איך אני אמור לפנות לקלאס ? (ואיפה?)
 

gilad g

New member
פשוט מאוד..

כשאתה מוסיף ListView (רגיל) לטופס שלך, בקוד שלו, מתהוות שורות שמגדירות אותו... שנה את כל ההתייחסויות של ListView ל-HebrewListView.
 
למעלה