Πώς να επικοινωνήσετε μεταξύ των εντύπων

Οι μορφές φόρμας προσφέρουν συγκεκριμένα χαρακτηριστικά που δεν μπορούμε να έχουμε όταν προβάλλουμε μη-ομαδικά. Συνηθέστερα, θα προβάλλουμε μια μορφή για να απομονώσουμε τις διαδικασίες της από οτιδήποτε άλλο θα συνέβαινε στην κύρια φόρμα. Αφού ολοκληρώσετε αυτές τις διαδικασίες, ίσως θελήσετε να μάθετε αν ο χρήστης πατήσει το κουμπί Αποθήκευση ή Ακύρωση για να κλείσει τη φόρμα. Μπορείτε να γράψετε κάποιο ενδιαφέρον κώδικα για να το επιτύχετε αυτό, αλλά δεν χρειάζεται να είναι δύσκολο. Δελφοί παρέχει τρόπους μορφής με την ιδιότητα ModalResult, την οποία μπορούμε να διαβάσουμε για να πούμε πώς έφυγε ο χρήστης από τη φόρμα.

Ο ακόλουθος κώδικας εμφανίζει ένα αποτέλεσμα, αλλά η ρουτίνα κλήσης το αγνοεί:

var
F: TForm2; ξεκινήσει
F: = TForm2.Create (μηδέν); F.ShowModal; F.Release; ...

Το παράδειγμα που δείξαμε παραπάνω δείχνει απλώς τη φόρμα, επιτρέπει στον χρήστη να κάνει κάτι με αυτό, και στη συνέχεια το απελευθερώνει. Για να ελέγξουμε τον τερματισμό της φόρμας, πρέπει να επωφεληθούμε από το γεγονός ότι η μέθοδος ShowModal είναι μια συνάρτηση που επιστρέφει μία από τις διάφορες τιμές του ModalResult. Αλλάξτε τη γραμμή

instagram viewer

F.ShowModal

προς το

αν F.ShowModal = mrOk έπειτα

Χρειαζόμαστε κάποιο κωδικό στη μορφή του τρόπου να ρυθμίσουμε ό, τι θέλουμε να ανακτήσουμε. Υπάρχουν περισσότεροι από ένας τρόποι για να αποκτήσετε το ModalResult επειδή το TForm δεν είναι το μοναδικό στοιχείο που έχει ιδιότητα ModalResult - το TButton έχει και το ένα.

Ας δούμε πρώτα το ModalResult του TButton. Ξεκινήστε ένα νέο έργο και προσθέστε μια επιπλέον φόρμα (κύριο μενού του Delphi IDE: Αρχείο -> Νέο -> Φόρμα). Αυτή η νέα φόρμα θα έχει ένα όνομα "Form2". Στη συνέχεια, προσθέστε ένα TButton (Όνομα: 'Button1') στην κύρια φόρμα (Form1), κάντε διπλό κλικ στο νέο κουμπί και πληκτρολογήστε τον ακόλουθο κώδικα:

διαδικασία TForm1.Button1Κλικ (αποστολέας: TObject); var f: TForm2; ξεκινήσει
f: = TForm2.Create (μηδέν); δοκιμάστεαν φά. ShowModal = mrOk έπειτα
Λεζάντα: = 'Ναι'
αλλού
Λεζάντα: = 'Όχι'; τελικά
φά. Ελευθέρωση; τέλος; τέλος;

Τώρα επιλέξτε την πρόσθετη φόρμα. Δώστε δύο TButtons, σημειώνοντας ένα 'Save' (Όνομα: 'btnSave'; Caption: 'Αποθήκευση') και το άλλο 'Ακύρωση' (Όνομα: 'btnCancel'; Λεζάντα: 'Ακύρωση'). Επιλέξτε το κουμπί Αποθήκευση και πιέστε το πλήκτρο F4 για να εμφανιστεί ο Επιθεωρητής αντικειμένων, μετακινηθείτε προς τα πάνω / κάτω μέχρι να βρείτε την ιδιότητα ModalResult και ρυθμίστε το σε mrOk. Επιστρέψτε στη φόρμα και επιλέξτε το κουμπί Ακύρωση, πατήστε το πλήκτρο F4, επιλέξτε την ιδιότητα ModalResult και ρυθμίστε το σε Κύριε.

Είναι τόσο απλό. Τώρα πατήστε το πλήκτρο F9 για να εκτελέσετε το έργο. (Ανάλογα με τις ρυθμίσεις περιβάλλοντος, οι Δελφοί ενδέχεται να σας ζητήσουν να αποθηκεύσετε τα αρχεία.) Μόλις εμφανιστεί η κύρια φόρμα, πατήστε το κουμπί 1 που προσθέσατε νωρίτερα, για να εμφανιστεί η φόρμα παιδιού. Όταν εμφανιστεί η μορφή παιδιού, πατήστε το κουμπί Αποθήκευση και η φόρμα κλείνει, μόλις επιστρέψετε στην κύρια φόρμα, σημειώστε ότι η λεζάντα λέει "Ναι". Πατήστε το κουμπί της κύριας φόρμας για να εμφανιστεί ξανά η μορφή παιδιού, αλλά αυτή τη φορά πατήστε το κουμπί Ακύρωση (ή το μενού Σύστημα Κλείσιμο στοιχείου ή το κουμπί [x] στην περιοχή λεζάντας). Η λεζάντα της κύριας φόρμας θα διαβάσει "Όχι".

Πως λειτουργεί αυτό? Για να μάθετε, ρίξτε μια ματιά στο συμβάν Click για TButton (από το StdCtrls.pas):

διαδικασία TButton. Κάντε κλικ; var Μορφή: TCustomForm; ξεκινήσει
Μορφή: = GetParentForm (Self); αν Μορφή μηδέν έπειτα
Μορφή. ModalResult: = ModalResult; κληρονόμησε Κάντε κλικ; τέλος;

Αυτό που συμβαίνει είναι ότι το Ιδιοκτήτης (σε αυτή την περίπτωση η δευτερεύουσα φόρμα) του TButton παίρνει το ModalResult του σετ σύμφωνα με την αξία του ModalResult του TButton. Αν δεν ρυθμίσετε το TButton. ModalResult, τότε η τιμή είναι mrNone (από προεπιλογή). Ακόμη και αν το TButton τοποθετηθεί σε άλλο έλεγχο, η γονική φόρμα χρησιμοποιείται ακόμα για να καθορίσει το αποτέλεσμα. Στη συνέχεια, η τελευταία γραμμή επικαλείται το κληρονομικό γεγονός που κληρονομήθηκε από την τάξη των προγόνων του.

Για να κατανοήσουμε τι συμβαίνει με το Forms ModalResult, αξίζει τον κόπο να αναθεωρήσετε τον κώδικα στο Forms.pas, τον οποίο θα πρέπει να βρείτε στο φάκελο \ DelphiN \ Source (όπου N αντιπροσωπεύει τον αριθμό έκδοσης).

Στη λειτουργία ShowModal της TForm, αμέσως μετά την εμφάνιση της φόρμας, ξεκινάει το Repeat-Until loop, το οποίο συνεχώς ελέγχει τη μεταβλητή ModalResult ώστε να γίνει τιμή μεγαλύτερη από το μηδέν. Όταν συμβεί αυτό, ο τελικός κώδικας κλείνει τη φόρμα.

Μπορείτε να ορίσετε το ModalResult κατά το σχεδιασμό, όπως περιγράφεται παραπάνω, αλλά μπορείτε επίσης να ορίσετε την ιδιότητα ModalResult της φόρμας απευθείας σε κώδικα κατά την εκτέλεση.

instagram story viewer