Visual Basic/יסודות השימוש בשפה/תכונות המשנות עיצוב של פקד: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
←‏רשימת כל הפקדים שבטופס: עדכון הטבלה, בהתאם לשינויים בשאר הפרק
הזזת התמונה, מחיקת שורה מהטבלה. הוספת הפרק ←‏כתיבת הקוד
שורה 28:
=== תיבות בחירה ===
 
[[תמונה:VB_FormatControls.jpg|שמאל|ממוסגר|עיצוב הטופס כפי שיופיע בסופו-של-דבר.]]
'''תיבת-הבחירה''' (''Option-box'') דומה לתיבת-הסימון בכך שכאשר המשתמש לוחץ על תיבה זו, מופיע בתוכה סימון. ההבדל המרכזי בין שני סוגי פקדים אלו הוא, ש'''תיבות-סימון''' שונות אינן תלויות זו בזו (כלומר, יתכן כי מספר תיבות שונות יהיו מסומנות בו זמנית), בעוד שבכל קבוצה נתונה של '''תיבות-בחירה''', רק תיבה אחת יכולה להיות מסומנת בכל רגע נתון. סימונה של תיבת-בחירה חדשה תבטל את הסימון בתיבה הקודמת שהייתה מסומנת.
 
שורה 77 ⟵ 76:
=== סיום עיצוב הטופס ===
 
[[תמונה:VB_FormatControls.jpg|שמאל|ממוסגר|עיצוב הטופס כפי שיופיע בסופו-של-דבר.]]
כעת, כל הפקדים שעל הטופס שלנו ממוקמים. לסיום, לפני שנתחיל בכתיבת הקוד, נבצע עוד שני שינויים קטנים בשניים מהפקדים שלנו.
 
שורה 113:
|-
|cmdColorRnd || CommandButton || '''Caption''' = "RND"
|-
|lblSize || Label || '''Caption''' = "Size:"
|-
|txtSize || TextBox || '''Text''' = "8"<br>'''Locked''' = True<br>'''BackColor''' = ButtonFace
שורה 122 ⟵ 120:
 
כעת, נחל בכתיבת הקוד של התוכנה.
 
== כתיבת הקוד ==
 
הקוד של התוכנה שלנו יהיה פשוט למדי - בעת לחיצה על כל אחד מהפקדים, התוכנה תשנה את התכונה הרלוונטית של התווית <tt>lblText</tt>. נפתח בכתיבת הקוד של תיבות הסימון.
 
=== שינוי עיצוב הגופן באמצעות תיבות הסימון ===
 
לחץ לחיצה כפולה על תיבת-הסימון <tt>chkUnderline</tt>. יפתח חלון הקוד של התוכנה, ויופיעו בו השורות:
<div style="Direction:Ltr">
Private Sub chkUnderline_Click()
End Sub
</div>
בדיוק כמו בתוכנות המוקדמות יותר שכתבנו, לחיצה כפולה על פקד פותחת חטיבת-קוד הרלוונטית ל'''מאורע ברירת-המחדל''' (''Default Event'') של הפקד; כלומר, חטיבת קוד אשר מתבצעת ברגע שמתרחש מאורע מסויים, שמוגדר כמאורע הבסיסי ביותר של הפקד. עד עכשיו, כאשר השתמשנו בכפתורי-פקודה (''Command Buttons''), מאורע זה היה המאורע '''לחיצה''' (''Click''), המתרחש כאשר הכפתור נלחץ. גם כאן, בתיבות-סימון, מאורע ברירת-המחדל הוא ''Click''; במקרה של תיבות-סימון, מאורע זה מתרחש כאשר הסימון שבתוך התיבה משתנה (מה שקורה לרוב בעקבות לחיצה על התיבה).
 
ובכן, כמו מקודם, עלינו להוסיף בין השורה <tt>Private Sub&lrm;...</tt> לבין <tt>End Sub</tt> את הקוד שאנו רוצים שיתרחש כאשר מתבצעת לחיצה על תיבת-הסימון. במקרה זה, אנו רוצים לשנות את סגנון הגופן של התווית שבתחתית הטופס, כך שיופיע מתחת לכתב '''קו תחתון''' (''Underline''). דבר זה אנו קובעים באמצעות התכונה FontUnderline; הוסף את שורת הקוד הבאה לתוכנה שלך:
<div style="Direction:Ltr">
Private Sub chkUnderline_Click()
'''lblText.FontUnderline = True'''
End Sub
</div>
הרץ כעת את התוכנה שלך, ולחץ על תיבת הסימון בה כתוב Underline. הכתב שבתוך התווית שלמטה יסומן מיד בקו תחתון, בדיוק כפי שתכננו! נסה כעת ללחוץ שנית על תיבת הסימון Underline - דבר אינו קורה. הסיבה לכך פשוטה - בקוד של התוכנה כתבנו שכאשר המשתמש לוחץ על תיבת הסימון, יופיע קו תחתון, בין אם התיבה מסומנת כעת ובין אם לא. כדי לפתור את הבעיה, בכל פעם שאנו לוחצים על תיבת הסימון, עלינו לגרום לתוכנה לבדוק האם התיבה מסומנת, ולפעול בהתאם.
 
נוכל לעשות זאת כך: נורה לתוכנה לשאול "האם התיבה מסומנת?"; ניקח את התשובה שנקבל, ונצמיד אותה לשאלה "האם לסמן קו תחתון מתחת לטקסט?". כך, אם נגלה כי '''כן''' יש סימון בתיבה, נורה לתוכנה '''כן''' לסמן קו תחתון; אם נגלה כי התיבה '''לא''' מסומנת, נדאג לכך ש'''לא''' יהיה קו תחתון.
 
איך אנו בודקים האם התיבה מסומנת? באמצעות התכונה '''ערך''' (''Value''). אם התיבה אינה מסומנת, '''ערכה''' יהיה 0. Visual Basic אוטומטית מתרגם את המספר 0 לביטוי '''False'''; ביטוי זה אנו יכולים לקחת ולשים בתוך התכונה <tt>FontUnderline</tt>, וכך למחוק את הקו התחתון.
 
מצד שני, אם התיבה כן מסומנת, '''ערכה''' יהיה 1. כל ערך השונה מ-0 מתורגם ב-Visual Basic לביטוי '''True''' - אנו נשים ביטוי זה בתכונה <tt>FontUnderline</tt>, וכך נגרום להופעתו של קו תחתון.
 
נכתוב זאת כעת בתוכנה:
<div style="Direction:Ltr">
Private Sub chkUnderline_Click()
lblText.FontUnderline = chkUnderline.Value
End Sub
</div>
הפעל כעת את התוכנה ונסה ללחוץ על תיבת הסימון. קו תחתון יופיע מתחת לטקסט. לחץ שנית על התיבה ובטל את סימון ה-V - הקו התחתון יעלם! כל הכבוד!
 
ננתח בקצרה תוכנה זו, באמצעות הביטויים '''ערך שמאל''' ו'''ערך ימין''', ש[[Visual Basic/יסודות השימוש בשפה/תכנות בסיסי עם אובייקטים#ערכי שמאל וערכי ימין|למדנו בעבר]]. הביטוי <tt>chkUnderline.Value</tt> נמצא מ'''ימין''' לסימן = , ולפיכך הוא '''ערך ימין''' (''RValue''). כיוון שכך, התוכנה בודקת את ערכו של ביטוי זה. אם, לדוגמא, ערכו של הביטוי הוא 1 (כלומר, התיבה מסומנת), התוכנה מקבלת את הערך '''1'''.
 
משמאל לסימן שווה = נמצא הביטוי <tt>lblText.FontUnderline</tt>. זהו ביטוי '''[[Visual Basic/יסודות השימוש בשפה/שימוש במשתנים#סוגי משתנים|בוליאני]]''', כלומר - הוא יכול לקבל רק את אחד משני הערכים True או False. לפי העקרון שלמדנו על ערכי ימין וערכי שמאל, התוכנה אמורה לקחת את הערך שמימין (במקרה זה - 1) ולשים אותו בביטוי שמשמאל, אך במקרה שלנו, הביטוי שמשמאל לשווה אינו ביטוי מספרי. לכן, התוכנה ממירה את הערך 1 באופן אוטומטי, והתוצאה המתקבלת - כפי שהוסבר לעיל - היא True.
 
יכולת זו, להמיר סוגי משתנים, תבועה ב-Visual Basic ונעשה בה שימוש רחב. חשוב לרגע על [[Visual Basic/יסודות השימוש בשפה/שימוש במשתנים#בניית תוכנת המחשבון|תוכנת המחשבון]] שבנינו בעבר. לקחנו שם את תוכנה של תיבת הטקסט <tt>txt_number</tt> - שהוא ביטוי '''טקסטואלי''' - ושמנו אותו בתוך המשתנה <tt>X</tt>, שהוא משתנה '''מספרי'''. Visual Basic ביצע המרה פשוטה של '''טקסט''' ל'''מספר''' כדי לאפשר למשתנה <tt>X</tt> לקלוט את תוכנה של התיבה. אך כפי שהוסבר שם, אם היית מנסה לכתוב אותיות בתוך תיבת הטקסט, הייתה מופיעה מיד הודעת שגיאה והתוכנה הייתה נתקעת; הסיבה לכך פשוטה - לא ניתן לבצע המרה של ביטוי כגון "abc" לערך מספרי.