ראשי >>שימוש בפקדים סטנדרטים של VisualBasic>>
עבודה עם מערכי פקדים
מפת הפרק:

7.3 עבודה עם מערכי פקדים

7.3.1 מדוע להשתמש במערכי פקדים?
7.3.2 יצירת מערך פקדים בזמן עיצוב
7.3.3 הוספת פקד למערך פקדים בזמן ריצה
7.3.4תסריט הוספת ומחיקת פקדים מהמערך

 

מערך פקדים הוא קבוצה של פקדים בעלי אותו שם ואותו סוג. כל הפקדים במערך הם גם בעלי אותן רוטינות של אירועים. במערך פקדים לפחות איבר אחד, ובאפשרותו לגדול ככל שיתירו משאבי המערכת והזכרון שלך. גודלו תלוי גם בכמות הזכרון ובכמות משאבי 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) .

יצירת מערך פקדים בזמן עיצוב

יש שלוש דרכים ליצור מערך פקדים בזמן עיצוב:

  • הצבת אותו שם ליותר מפקד אחד.
  • העתקת פקד קיים והדבקתו בטופס.
  • להציב במאפיין Index של פקד ערך השונה מ- Null.

שים לב: מערכים של פקדי תפריט יש ליצור בעורך התפריט. להדרכה מפורטת כיצד לעשות זאת, ראה ערך
Creating and Modifying Mens at Run Time ב- Creating a User Interface.

כדי להוסיף איבר למערך פקדים על ידי שינוי שמו:

  1. צור את הפקדים שברצונך שיהיו במערך. (כולם חייבים להיות מאותו הטיפוס). קבע מי מהם יהיה הראשון במערך.
  2. בחר אחד מהפקדים ושנה את תצורת Name שלו לתצורה עבור הפקד הראשון במערך.
  3. כאשר תקליד שם קיים עבור פקד במערך, Visual Basic יציג תיבת דו-שיח על מנת שתאשר שברצונך ליצור מערך פקדים. בחר Yes.

לדוגמא, אם שם האיבר הראשון במערך הפקדים הוא cmdCtlArr, תבחר כפתור פקודה שאותו תוסיף למערך, ואחר כך תקבע את שמו ל- cmdCtlArr. תופיע הודעה :

"You already have a control named 'cmdCtlArr.' Do you want to create a control array?"

בחר Yes כדי לאשר את הפעולה.

כדי להוסיף איבר למערך פקדים על ידי העתקת פקד קיים:

  1. צור פקד במערך הפקדים.
  2. כאשר הפוקוס על הפקד , בתפריט עריכה בחר העתק.
  3. בתפריט עריכה בחר הדבק. Visual Basic יציג תיבת דו שיח כדי שתאשר שברצונך ליצור מערך פקדים. בחר Yes לאישור הפעולה.
באינדקס של הפקד החדש יוצב הערך 1. הפקד הראשון שיצרת יקבל אינדקס 0.

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

הוספת פקד למערך פקדים בזמן ריצה

תוכל להוסיף ולהוריד פקדים ממערך בזמן ריצה באמצעות ההצהרות Load ו- Unload. הפקד שברצונך להוסיף חייב להיות איבר במערך פקדים קיים. לאחר שבזמן העיצוב יצרת פקד שמאפיין Index שלו הוא 0, בזמן ריצה תשתמש בתחביר כזה:

Load object(index%)
Unload object(index%)

תיאור הארגומנטים:
object - שם הפקד שברצונך להוסיף/להסיר מהמערך.
Index% - האינדקס של הפקד במערך.

כאשר אתה טוען איבר חדש למערך פקדים, תצורת רוב המאפיינים שלו מועתקת מהאיבר בעל האינדקס הנמוך ביותר שקיים כבר במערך - בדוגמא זו, האיבר בעל אינדקס 0. מאפייני Visible, Index ו- TabIndex אינם מועתקים אוטומטית לאיברים חדשים של המערך, ולכן כדי להפוך לנראה פקד חדש שהוספת , עליך להציב True במאפיין Visible שלו.

שים לב: Visual Basic ייצר שגיאה אם תנסה להשתמש בהצהרת Load עם אינדקס שקיים כבר במערך.

חשוב: ביכולתך להשתמש בהצהרת Unload כדי להסיר כל פקד שייצרת בעזרת Load, אבל לא ניתן להשתמש ב- Unload כדי להסיר פקדים שייצרת בזמן עיצוב, בין אם הם שייכים למערך פקדים ובין אם לא.

תסריט הוספת ומחיקת פקדים מהמערך

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

דוגמא 7.3 : הוספת פקדים בזמן ריצה

הטבלה הבאה מכילה את תצורות המאפיינים עבור האובייקטים שביישום.

תצורה/ערך מאפיין אובייקט
Control Array Example Caption טופס
PicDisplay Name תיבת תמונה
Select an option button
to display a new color
Caption תווית
Index OptButton 0 Name Option1 כפתור בחירה
Index OptButton 0 Name Option2 כפתור בחירה
CmdAdd &Add Name Caption כפתור פקודה ראשון
CmdDelete &Delete Name Caption כפתור פקודה שני
CmdClose &Close Name Caption כפתור פקודה שלישי

מאורעות באפליקציה עם מערך פקדים
בשלב הבא, עליך להוסיף רוטינות לטיפול במאורעות עבור כפתורי הבחירה וכפתורי הפקודה.

התחל בהצהרת הטופס:

Dim MaxId As Integer

הרוטינה לטיפול במאורע Click משותפת לכל כפתורי הבחירה:

Private Sub optButton_Click (Index As Integer)
 picDisplay.BackColor = QBColor(Index + (
End Sub

כפתורי בחירה חדשים יתווספו על ידי רוטינת Click של כפתור הפקודה Add. בדוגמא זו, קיימת בדיקה בקוד שלא מוסיפים יותר מעשרה כפתורי בחירה, לפני ביצוע Load. לאחר הוספת פקד למערך, יש להציב True במאפיין Visible שלו.

Private Sub cmdAdd_Click ()
 If MaxId = 0 Then MaxId = 1 ' Set total option buttons.
 If MaxId > 8 Then Exit Sub ' Only ten buttons allowed.
  MaxId = MaxId + 1 ' Increment button count.
  Load optButton(MaxId) ' Create new button
. optButton(0).SetFocus ' Reset button selection. Set new button under previous button.
  optButton(MaxId).Top = optButton(MaxId - 1).Top + 400
  optButton(MaxId).Visible = True ' Display new button.
  optButton(MaxId).Caption = "Option" & MaxId + 1
End Sub

כפתורי בחירה יימחקו על ידי רוטינת Click של כפתור הפקודה Delete:

Private Sub cmdDelete_Click ()
 If MaxId <= 1 Then Exit Sub ' Keep first two buttons
  Unload optButton(MaxId) ' Delete last button.
  MaxId = MaxId - 1 ' Decrement button count.
  optButton(0).SetFocus ' Reset button selection.
End Sub

אירוע Click בכפתור Close מסיים את האפליקציה:

Private Sub cmdClose_Click ()
 Unload Me
End Sub

קטגורית פקדים עבודה עם מערכי פקדים פרק - 8