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

תוכן שנמחק תוכן שנוסף
מ שינוי בניסוח ותיקון שגיאות דו-כיווניות
שורה 40:
 
הפעל כעת את התוכנה, ובדוק זאת. שים לב שניתן לכתוב רק מספרים בתיבת-הטקסט - אם תכניס אות, או כל תו שאינו ספרה, נקודה או מינוס, תופיע הודעת שגיאה כאשר תלחץ על הכפתור. אם הקלט שבתיבת-הטקסט תקין, התוכנה תכתוב בתיבה את הערך המוחלט שלו.
 
=== כתיבת מספר תנאים ===
 
במקרים מסויימים, נרצה שפקודת ''If'' אחת תבדוק מספר תנאים, לפני שיוחלט האם לבצע את הפקודות. ביכולתינו להגדיר שילוב של כמה תנאים שרק אם כולם - או חלק מסויים מהם - יתממשו, שורות הקוד שבתוך מבנה-התנאי יבוצעו.
 
לצורך ההדגמה הבאה, פתח פרוייקט חדש ב-Visual Basic, ומקם בטופס שתי תיבות טקסט וכפתור פקודה. שנה את שמו של הכפתור ל-cmdOk. לתיבת טקסט אחת קרא txtName, ולשנייה קרא txtPassword. בתיבה השנייה, מצא את המאפיין הנקרא PasswordChar וכתוב בתוכו סימן כוכבית. דבר זה יגרום לכך שכאשר המשתמש יכתוב טקסט בתיבה, לא יופיעו האותיות שכתב, ובמקומן יופיעו כוכביות (בדיוק כמו בתוכנות ואתרי-אינטרנט שונים הדורשים סיסמאות). כעת, מקם על הטופס תווית (''Label''), קרא לה lblSecret וכתוב בה (באמצעות התכונה ''Caption'') את המילה "סוד". הפוך את התווית לבלתי-נראית (באמצעות התכונה ''Visible'').
 
ברצוננו לגרום לתווית להופיע על המסך לאחר שהמשתמש ילחץ על כפתור-הפקודה, רק בתנאי שהכניס שם-משתמש וסיסמא נכונים. כיוון שברצוננו לבדוק שני תנאים (גם שם-משתמש וגם סיסמא), נשתמש במילת-המפתח <tt>And</tt> בתוך התנאי שלנו.
 
נניח ששם המשתמש הרצוי הוא '''User''' והסיסמא היא '''Blue dawn'''. לחץ לחיצה-כפולה על כפתור-הפקודה על מנת ליצור חטיבת-קוד עבורו, וכתוב בה את הקוד הבא:
<source lang="vb">
Private Sub cmdOk_Click()
If txtName.Text = "User" And txtPassword.Text = "Blue dawn" Then
lblSecret.Visible = True
End If
End Sub
</source>
הפעל כעת את התוכנה. אם תלחץ על הכפתור כעת, לא יקרה דבר. כתוב בתיבת הטקסט הראשונה User ובשנייה Blue dawn (יש לשים לב מתי האותיות גדולות ומתי קטנות) - אם תלחץ כעת על הכפתור, התווית תופיע.
 
נניח כעת שברצוננו לאפשר לשני משתמשים שונים לראות את ה"סוד". לכל משתמש יש שם וסיסמא, ואם יתקבלו שם וסיסמא תואמים אז הסוד יוצג. נאמר שהמשתמש השני נקרא '''Admin''' והסיסמא שלו היא '''Head123'''; דרך אחת לאפשר לשני המשתמשים לראות את התווית הנסתרת היא לעשות שתי פקודות תנאי שונות:
<source lang="vb">
Private Sub cmdOk_Click()
If txtName.Text = "User" And txtPassword.Text = "Blue dawn" Then
lblSecret.Visible = True
End If
If txtName.Text = "Admin" And txtPassword.Text = "Head123" Then
lblSecret.Visible = True
End If
End Sub
</source>
שיטה זו תפעל, אך כמובן שקיימת שיטה נוחה ויעילה יותר ממנה. שיטה זו היא שימוש במילת המפתח <tt>Or</tt>, אשר גורמת לכך שהפקודות יתבצעו אם התקיים לפחות אחד משני התנאים שהתקבלו. נשתמש בה כך (שים לב ששורת התנאי שבורה באמצע באמצעות הקו-התחתון, כיוון ששורת הקוד מאוד ארוכה):
<source lang="vb">
Private Sub cmdOk_Click()
If txtName.Text = "User" And txtPassword.Text = "Blue dawn" Or _
txtName.Text = "Admin" And txtPassword.Text = "Head123" Then
lblSecret.Visible = True
End If
End Sub
</source>
הפעל כעת את התוכנה. בין אם תכתוב את השם User וסיסמא Blue Dawn, ובין אם תכתוב שם Admin וסיסמא Head123, התווית תוצג (אך היא לא תוצג עבור שילוב לא תקין, כגון שם Admin וסיסמא Blue dawn).
 
שים לב, כי בתוכנה שכתבנו ניתן לראות שהמחשב בודק קודם-כל זוגות תנאים שביניהם נמצאת המילה <tt>And</tt>, ולאחריהם הוא בודק תנאים שביניהם נמצאת המילה <tt>Or</tt>. דבר זה דומה למתמטיקה - כשם שקיים סדר פעולות-חשבון הקובע כי פעולות כפל וחילוק יתבצעו לפני חיבור וחיסור, כך קיים סדר פעולות במחשבים הקובע כי פקודת <tt>And</tt> תתבצע לפני פקודת <tt>Or</tt>. אם ברצוננו לעקוף סדר זה, עלינו להשתמש בסוגריים, בדיוק כמו במתמטיקה; כך, את התנאי שעליו דיברנו כעת, ניתן היה גם לכתוב בצורה כזו (שים לב לסוגריים):
<source lang="vb">
If (txtName.Text = "User" And txtPassword.Text = "Blue dawn") Or _
(txtName.Text = "Admin" And txtPassword.Text = "Head123") Then
</source>