כיצד לתקשר בין טפסים

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

הקוד הבא מחזיר תוצאה, אך שגרת השיחות מתעלמת ממנה:

var
F: TForm2; התחל
F: = TForm2.Create (אפס); F.ShowModal; שחרר; ...

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

F.ShowModal

ל

אם F.ShowModal = mrOk לאחר מכן

אנו זקוקים לקוד כלשהו בצורה המודאלית כדי להגדיר את כל מה שנרצה לאחזר. יש יותר מדרך אחת להשיג את ModalResult מכיוון ש- TForm הוא לא המרכיב היחיד שיש לו נכס ModalResult - גם ל- TButton יש אחד כזה.

instagram viewer

בואו נסתכל תחילה על ModalResult של TButton. התחל פרויקט חדש והוסף טופס אחד נוסף (Delphi IDE תפריט ראשי: קובץ -> חדש -> טופס). לטופס חדש זה יש שם 'Form2'. לאחר מכן הוסף כפתור TB (שם: 'כפתור 1') לטופס הראשי (טופס 1), לחץ פעמיים על הכפתור החדש והזן את הקוד הבא:

תהליך TForm1.Button1Click (שולח: TObject); var f: TForm2; התחל
f: = TForm2.Create (אפס); נסהאם ו. ShowModal = mrOk לאחר מכן
הכיתוב: = 'כן'
אחר
הכיתוב: = 'לא'; סוף סוף
ו. שחרור; סוף; סוף;

בחר כעת את הטופס הנוסף. תן לו שני כפתורי TB, וסימנו אחד 'שמור' (שם: 'btnSave'; הכיתוב: 'שמור') והשני 'ביטול' (שם: 'btnCancel'; הכיתוב: 'ביטול'). בחר בלחצן שמור ולחץ על F4 כדי להעלות את מפקח האובייקט, גלול למעלה / למטה עד שתמצא את הנכס ModalResult ו- הגדר אותו ל- mrOk. חזור לטופס ובחר בלחצן ביטול, לחץ על F4, בחר בנכס ModalResult והגדר אותו ל mrCancel.

זה פשוט כמו זה. כעת לחץ על F9 כדי להפעיל את הפרויקט. (בהתאם להגדרות הסביבה שלך, דלפי עשויה לבקש לשמור את הקבצים.) ברגע שהטופס הראשי מופיע, לחץ על הכפתור 1 שהוספת קודם, כדי להציג את טופס הילד. כאשר מופיע טופס הילד, לחץ על לחצן שמור והטופס נסגר, פעם אחת חזרה לטופס הראשי שים לב כי הכיתוב שלו אומר "כן". לחץ על כפתור הטופס הראשי כדי להעלות שוב את טופס הילד אך הפעם לחץ על לחצן ביטול (או על תפריט מערכת סגור את הפריט או על כפתור [x] באזור הכיתוב). הכיתוב של הטופס העיקרי יקרא "לא".

איך זה עובד? כדי לגלות התבונן באירוע הקליק של TButton (מתוך StdCtrls.pas):

תהליך טבוטון. לחץ; var טופס: TCustomForm; התחל
טופס: = GetParentForm (עצמי); אם טופס אפסי לאחר מכן
טופס. ModalResult: = ModalResult; ירש לחץ; סוף;

מה שקורה הוא ש- בעלים (במקרה זה הצורה המשנית) של TButton מקבל את ערכת ModalResult שלו בהתאם לערך ModalResult של TButton. אם לא תגדיר TButton. ModalResult, ואז הערך הוא mrNone (כברירת מחדל). גם אם כפתור ה- TB ממוקם על בקרה אחרת, טופס ההורה עדיין משמש לקביעת התוצאה שלו. השורה האחרונה לאחר מכן קוראת לאירוע הקליק שעבר בירושה משכבת ​​אבותיו.

כדי להבין מה קורה עם הטפסים ModalResult כדאי לעיין בקוד ב- Forms.pas, שתוכל למצוא בו.. \ DelphiN \ Source (כאשר N מייצג את מספר הגרסה).

בפונקציית ShowModal של TForm, מיד לאחר הצגת הטופס, מתחיל לולאה Repeat-עד אשר ממשיך לבדוק אם המשתנה ModalResult יהפוך לערך הגדול מאפס. כאשר זה קורה, הקוד הסופי סוגר את הטופס.

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

instagram story viewer