7.3 עבודה עם מערכי פקדים 7.3.1 מדוע להשתמש במערכי פקדים?
מערך פקדים הוא קבוצה של פקדים בעלי אותו שם ואותו סוג. כל הפקדים במערך הם גם בעלי אותן רוטינות של אירועים. במערך פקדים לפחות איבר אחד, ובאפשרותו לגדול ככל שיתירו משאבי המערכת והזכרון שלך. גודלו תלוי גם בכמות הזכרון ובכמות משאבי Windows שכל פקד דורש. האינדקס המקסימלי במערך כזה הוא 32767. לכל אחד מאיברי המערך ניתן לקבוע ערכים שונים למאפיינים. שימושים נפוצים במערכי פקדים כוללים פקדי תפריטים וכפתורי בחירה מקובצים. שים לב: ל- Visual Basic היכולת להוסיף פקדים לאוסף הפקדים בצורה דינמית, בתנאי שאין התייחסות אליהם. ההערה מתייחסת רק לפקדים שיש התייחסות אליהם ומוספים בזמן עיצוב, על ידי גזירת פקד והדבקתו בטופס. למידע נוסף אודות הוספת פקדים בזמן ריצה, ראה ערך Add Method(Control Collection) ו- Add Method(Licences Collection). הוספת פקדים בעזרת מערכי פקדים מבזבזת פחות משאבים מאשר הוספת כמה פקדים מאותו טיפוס לטופס בזמן עיצוב. מערכי פקדים שימושיים גם אם אתה מעונין בשיתוף קוד בין כמה פקדים. לדוגמא, אם שלושה כפתורי בחירה מיוצרים כמערך פקדים, אותו קוד יבוצע עם לחיצה על כל אחד מהכפתורים. אם ברצונך ליצור מופע חדש של פקד בזמן ריצה, הפקד חייב להיות איבר במערך פקדים. כל איבר חדש במערך יורש את הרוטינות המשותפות לטיפול במאורעות של המערך. לדוגמא, אם בטופס שלך יש כמה תיבות טקסט שכל אחת מהן קולטת תאריך, ניתן לבנות מהן מערך פקדים כך שלכולן אותו קוד עבור וידוא. דוגמא למערך של פקדים - תמונה 7.2
יישום המחשבון (המופיע בספריית הדוגמאות ובתמונה 7.2) מכיל שני מערכי פקדים - כפתורי המספרים וכפתורי הפעולות. שים לב שהגישה לכל פקד נעשית בצורה object(index). מציינים את האינדקס במערך של כל פקד כאשר יוצרים אותו. למעשה, ציון אינדקס לפקד בזמן עיצוב הופך את הפקד לחלק ממערך. המאפיין Index מבדיל בין איברי המערך השונים. כאשר אחד הפקדים במערך מזהה מאורע, Visual Basic קורא לרוטינת מאורע משותפת, ומעביר פרמטר (ערך מאפיין ה-Index), על מנת למצוא מי מהפקדים מזהה את המאורע. לדוגמא, השורה הראשונה של רוטינת המאורע Number_Click היא Private Sub Number_Click (Index As Integer) אם Number(0) מזהה את המאורע, Visual Basic מעביר 0 כפרמטר אינדקס, ואם Number(1) מזהה את המאורע, Visual Basic מעביר 1 כפרמטר אינדקס. מלבד ערך פרמטר זה, שאר הקוד של Number_Click שיבוצע זהה לכל הפקדים מ- Number(0) ועד Number(9) . יש שלוש דרכים ליצור מערך פקדים בזמן עיצוב:
שים לב: מערכים של פקדי תפריט יש ליצור בעורך התפריט. להדרכה מפורטת כיצד
לעשות זאת, ראה ערך כדי להוסיף איבר למערך פקדים על ידי שינוי שמו:
לדוגמא, אם שם האיבר הראשון במערך הפקדים הוא cmdCtlArr, תבחר כפתור פקודה שאותו תוסיף למערך, ואחר כך תקבע את שמו ל- cmdCtlArr. תופיע הודעה : "You already have a control named 'cmdCtlArr.' Do you want to create a control array?" בחר Yes כדי לאשר את הפעולה. כדי להוסיף איבר למערך פקדים על ידי העתקת פקד קיים:
האינדקס של כל איבר חדש במערך הפקדים תואם לסדר שבו נוספו האיברים למערך. כאשר מוסיפים פקדים באופן זה, רוב המאפיינים הוויזואליים שלהם, כגון רוחב, גובה וצבע, מועתקים מהפקד הראשון במערך אל הפקדים החדשים. הוספת פקד למערך פקדים בזמן ריצה תוכל להוסיף ולהוריד פקדים ממערך בזמן ריצה באמצעות ההצהרות Load ו- Unload. הפקד שברצונך להוסיף חייב להיות איבר במערך פקדים קיים. לאחר שבזמן העיצוב יצרת פקד שמאפיין Index שלו הוא 0, בזמן ריצה תשתמש בתחביר כזה: Load object(index%) תיאור הארגומנטים: כאשר אתה טוען איבר חדש למערך פקדים, תצורת רוב המאפיינים שלו מועתקת מהאיבר בעל האינדקס הנמוך ביותר שקיים כבר במערך - בדוגמא זו, האיבר בעל אינדקס 0. מאפייני Visible, Index ו- TabIndex אינם מועתקים אוטומטית לאיברים חדשים של המערך, ולכן כדי להפוך לנראה פקד חדש שהוספת , עליך להציב True במאפיין Visible שלו. שים לב: Visual Basic ייצר שגיאה אם תנסה להשתמש בהצהרת Load עם אינדקס שקיים כבר במערך. חשוב: ביכולתך להשתמש בהצהרת Unload כדי להסיר כל פקד שייצרת בעזרת Load, אבל לא ניתן להשתמש ב- Unload כדי להסיר פקדים שייצרת בזמן עיצוב, בין אם הם שייכים למערך פקדים ובין אם לא. תסריט הוספת ומחיקת פקדים מהמערך הדוגמא מציגה איך מוסיפי ומוחקים פקדים (במקרה הזה, כפתורי בחירה) בזמן
ריצה. הדוגמא מאפשרת למשתמש להוסיף כפתורים המשנים את צבע הרקע של תיבת תמונה.
דוגמא 7.3 : הוספת פקדים בזמן ריצה הטבלה הבאה מכילה את תצורות המאפיינים עבור האובייקטים שביישום.
מאורעות באפליקציה עם מערך פקדים התחל בהצהרת הטופס: Dim MaxId As Integer הרוטינה לטיפול במאורע Click משותפת לכל כפתורי הבחירה: Private Sub optButton_Click (Index As Integer) כפתורי בחירה חדשים יתווספו על ידי רוטינת Click של כפתור הפקודה Add. בדוגמא זו, קיימת בדיקה בקוד שלא מוסיפים יותר מעשרה כפתורי בחירה, לפני ביצוע Load. לאחר הוספת פקד למערך, יש להציב True במאפיין Visible שלו. Private Sub cmdAdd_Click () כפתורי בחירה יימחקו על ידי רוטינת Click של כפתור הפקודה Delete: Private Sub cmdDelete_Click () אירוע Click בכפתור Close מסיים את האפליקציה: Private Sub cmdClose_Click ()
|