Συνέχεια του αντικειμενoστραφούς προγραμματισμού Επέκταση των κλάσεων σε Visual Components (Window Controls) Κατασκευή του Interface στο Design Time, και καθορισμός πολλών παραμέτρων των αντικειμένων (properties). Επιλογή από βιβλιοθήκη έτοιμων visual components και προσαρμογή στις ανάγκες της εφαρμογής Τα σύγχρονα λειτουργικά συστήματα είναι Object Oriented και βασίζονται σε visual objects (windows, controls, buttons κ.λ.π.) Κατασκευή visual objects που μπορεί να είναι επαναχρησιμοποιήσιμα από άλλες εφαρμογές (ActiveX Controls, COM objects) Πολλές πλατφόρμες ανάπτυξης Οπτικού Προγραμματισμού, MS Visual Studio (Visual C++, Visual Basic, Visual Java, Visual C#, Visual F#) C++Builder, Delphi, Eclipse, QT, Σπύρος Καζαρλής
Ο εγγενής ή μη διαχειριζόμενος κώδικας (Native / Unmanaged) αποτελεί κώδικα που γράφεται για συγκεκριμένο Λειτουργικό Σύστημα, και είναι μεταφρασμένος σε χαμηλό επίπεδο (κώδικας μηχανής με κλήσεις ρουτινών του ΛΣ). Πλεονεκτήματα: Οι παραγόμενες εφαρμογές είναι γρήγορες και αποδοτικές και μικρότερες συνολικά σε μέγεθος (bytes). Μειονεκτήματα: απαιτούν από τον προγ/στή συνετή διαχείριση της μνήμης (new/delete) και δεν μεταφέρονται σε άλλα Λειτ. Συστήματα. Ο διαχειριζόμενος κώδικας (Managed) αποτελεί κώδικα που μεταφράζεται σε ένα ενδιάμεσο επίπεδο (CLR-VM ή Middleware) το οποίο και τελικά μεταφράζεται κατά την εκτέλεση σε κώδικα μηχανής και κλήσεις ρουτινών ΛΣ που να είναι συμβατοί με την συγκεκριμένη πλατφόρμα εκτέλεσης μέσω ενός Just-In-Time Compiler (JIT). Πλεονεκτήματα: Αυτόματη διαχείριση μνήμης (garbage collection) και μεταφερσιμότητα (portability) Μειονεκτήματα: Οι παραγόμενες εφαρμογές είναι αργές, λιγότερο αποδοτικές και μεγαλύτερες συνολικά σε μέγεθος (bytes).
Πλατφόρμες παραγωγής Native / Unmanaged κώδικα: Συνήθως ο κώδικας C, C++ C++ Builder Delphi (Object Pascal) MS Visual C++ (MFC Library) Πλατφόρμες παραγωγής Μanaged κώδικα: Όλες οι γλώσσες του.net framework MS Visual C++ (.NET framework) (C#, Java, F#, Visual Basic, κ.λ.π.) Όλες οι εφαρμογές Java που τρέχουν μέσω του Java Virtual Machine Στο Microsoft Visual Studio μπορεί κανείς να προγραμματίσει σε γλώσσα C/C++ τόσο σε Native Code χρησιμοποιώντας την βιβλιοθήκη MFC (Microsoft Foundation Class Library) και παράγοντας MFC Applications, όσο και σε Managed Code χρησιμοποιώντας το.net framework και παράγοντας Windows Forms Applications που χρησιμοποιούν το ενδιάμεσο επίπεδο CLR (Common Language Runtime).
1983-1992 Microsoft C 1.0-7.0 1993 Microsoft Visual C++ 1.0 1995 Microsoft Visual Studio v 4.0 1997 Microsoft Visual Studio 97 (v 5.0) 1998 Microsoft Visual Studio v 6.0 2002 Microsoft Visual Studio.NET (v. 7.0) 2005 Microsoft Visual Studio 2005 (v. 8.0) 2008 Microsoft Visual Studio 2008 (v. 9.0) 2010 Microsoft Visual Studio 2010 (v. 10.0) 2012 Microsoft Visual Studio 2012 (v. 11.0) 2013 Microsoft Visual Studio 2013 (v. 12.0)
Οδηγούμενος από συμβάντα προγρ/σμός - ακολουθιακός προγρ/σμός Προγραμματισμός για ανταπόκριση σε συμβάντα Το πρόγραμμα δεν καθορίζει την σειρά ενεργειών του χρήστη, αλλά αποκρίνεται σε αυτές Το πρόγραμμα δεν βασίζεται σε ακολουθία ενεργειών ( void main() ). Υπάρχει συνάρτηση main() που κάνει αρχικοποιήσεις και εκτελεί τον βρόχο μηνυμάτων (Application::Run() ή CWinApp::InitInstance()). Το πρόγραμμα δεν μπορεί να γνωρίζει την επόμενη ενέργεια του χρήστη Δύο κατηγορίες συμβάντων : User Events, System Events Όταν συμβαίνει ένα event, η εφαρμογή ελέγχει άν υπάρχει αντίστοιχη κατασκευασμένη συνάρτηση με τον κώδικα για τον χειρισμό του event και την εκτελεί. Αλλιώς τίποτα δεν συμβαίνει. Φτιάχνουμε κώδικα μόνο για τα events που μας ενδιαφέρουν, αγνοώντας τα υπόλοιπα
New Project: Δημιουργία νέου Project New Web Site: Δημιουργία νέου Web Site. New Team Project: Δημιουργία Ομαδικού Project New File: Δημιουργία νέου αρχείου π.χ..cpp New Project from Existing Code: Δημιουργία νέου Project με βάση κώδικα που προυπάρχει
Open Project/Solution: Άνοιγμα υπάρχοντος Project ή ομάδας Projects Open Web Site: Άνοιγμα υπάρχοντος Web Site Team Project: Άνοιγμα ομαδικού Projet File: Άνοιγμα μεμονωμένου αρχείου π.χ..cpp Convert: μετατροπή Project
Add New Project Add New Web Site Add Existing Project Add Existing Web Site Close Close Solution Save file.ext Save file.ext as Save All Export Template (wizard) Source Control Page Setup Print Recent File / Projects Exit
Build Menu Build Solution F7 Μεταγλωττίζει όλα τα τροποποιημένα source αρχεία (make) και κάνει Link παράγοντας το.exe, για όλα τα Projects που περιλαμβάνονται στο Solution. Rebuild Solution Ctrl+Alt+F7 Μεταγλωττίζει όλα τα source αρχεία τροποποιημένα ή μη, και κάνει Link παράγοντας το.exe, για όλα τα Projects που περιλαμβάνονται στο Solution. Στην ουσία κάνει πρώτα Clean και μετά Build Clean Solution Διαγράφει όλα τα ενδιάμεσα και τελικά παραγόμενα αρχεία του Project, ώστε να μπορεί να παραχθεί νέο Build από την αρχή.
Build Menu Build Project Μεταγλωττίζει όλα τα τροποποιημένα source αρχεία και κάνει Link παράγοντας το.exe, για το τρέχον Project. Rebuild Project Μεταγλωττίζει όλα τα source αρχεία του τρέχοντος Project αλλαγμένα ή μη, και κάνει Link παράγοντας το.exe. Clean Project Διαγράφει όλα τα ενδιάμεσα και τελικά παραγόμενα αρχεία του Project, Project Only Build Only (Project), Rebuild Only (Project), Clean (Project), Link (Project) Χρησιμεύουν για μεταγλώττιση μόνο του επιλεγμένου Project σε ένα Solution, χωρίς τις τυχόν εξαρτήσεις του.
Build Menu Profile Guided Optimization Επιτρέπει την βελτιστοποίηση του κώδικα με βάση στοιχεία που συλλέγονται κατά την εκτέλεση της εφαρμογής (Profile) Batch Build Επιτρέπει τον πλήρη έλεγχο των εκδόσεων που παράγονται κατά το «κτίσιμο» της εφαρμογής (Debug Release, Win32 x64) Configuration Manager Καθορίζει τις παραμέτρους του «κτισίματος» της εφαρμογής Compile Ctrl + F7 Μεταγλωττίζει το τρέχον πηγαίο αρχείο ελέγχοντας για συντακτικά σφάλματα, και παράγει το αντίστοιχο αρχείο αντικειμενικού κώδικα.obj
Στο MS Visual Studio ο προγραμματιστής μπορεί να καθορίσει την παραγωγή του εκτελέσιμου προγράμματος σε μία από τις ακόλουθες επιλογές: 1. Debug Build: Κατά την μεταγλώττιση παράγονται πληροφορίες για debugging του κώδικα στο αρχείο <project>.pdb και δεν γίνεται βελτιστοποίηση του κώδικα. Συνήθως χρησιμοποιείται κατά την ανάπτυξη μίας εφαρμογής, καθώς διευκολύνει την διόρθωση σφαλμάτων. Τα παραγόμενα αρχεία εξόδου μαζί με το τελικό.exe δημιουργούνται στον φάκελο <Project>/DEBUG 2. Release Build: Δεν παράγονται πληροφορίες debugging και γίνεται βελτιστοποίηση του κώδικα. Χρησιμοποιείται για την τελική έκδοση του προγράμματος μετά την εκσφαλμάτωση. Τα παραγόμενα αρχεία εξόδου μαζί με το τελικό.exe δημιουργούνται στον φάκελο <Project>/RELEASE
Solution Explorer Εμφανίζει όλα τα Project ενός Solution και όλα τα αρχεία που αποτελούν ένα Project. External Dependencies: Τα.h αρχεία που χρησιμοποιεί το Project Header Files: Τα.h αρχεία με τις δηλώσεις κλάσεων και τύπων των πηγαίων αρχείων (.cpp) του Project Resource Files: Συνοδευτικά αρχεία με πόρους του Project (εικονίδια, μενού, εικόνες, διάλογοι, αλφαριθμητικά, κ.λ.π.) Source Files: Τα πηγαία αρχεία κώδικα του Project (.cpp)
Class View Εμφανίζει τις Κλάσεις που έχουν δηλωθεί στο Project Για κάθε κλάση μπορεί να εμφανίζει τα μέλη της κλάσης, Data Members και Function Members. Εμφανίζει τις απεικονίσεις Events/Messages και αντίστοιχων υπορουτινών που χειρίζονται τα Events αυτά.
Property Manager Εμφανίζει όλες τις παραμέτρους «κτισίματος» της εφαρμογής στις εκδόσεις Debug και Release καθώς και για εκδόσεις των 32 και 64 bits. Καθορίζεται αν η εφαρμογή κάνει χρήση χαρακτήρων των 2 byte (Unicode Multibyte Characters) ή όχι (ASCII 1 byte characters) Επίσης καθορίζεται ο τρόπος σύνδεσης με τις βιβλιοθήκες (MFC Library) : Δυναμική διασύνδεση με την βιβλιοθήκη (Dynamic Link to MFC) Στατική διασύνδεση με την βιβλιοθήκη (Static Link to MFC)
Resource View Εμφανίζει και επιτρέπει τον καθορισμό των πόρων (Resources) του project: Accelerator : Καθορίζει πλήκτρα συντομεύσεων (shortcut keys) που χρησιμοποιούνται στην εφαρμογή Dialog: Εμφανίζει τους διαλόγους δευτερεύοντες φόρμες που χρησιμοποιεί η εφαρμογή. Icon: Τα εικονίδια που χρησιμοποιούνται στην εφαρμογή Menu: Τα Μενού επιλογών που χρησιμοποιούνται στην εφαρμογή String Table: Πίνακας με αλφαριθμητικά που χρησιμοποιούνται στην εφαρμογή και καθορίζονται κεντρικά.
Πλήκτρα λειτουργιών του περιβάλλοντος -IDE Ctrl + F7 Compile (Μεταγλώττιση ενός πηγαίου αρχείου.cpp) F7 Build Solution (Μεταγλώττιση και παραγωγή exe) F5 Start Debugging (Run) (εκτέλεση της εφαρμογής) F1 Βοήθεια του MS Visual Studio για το σημείο που βρισκόμαστε Πλήκτρα του επεξεργαστή κειμένου (κώδικα) Ctrl + X Cut (αποκοπή επιλεγμένου τμήματος κειμένου) Ctrl + C Copy (αντιγραφή επιλεγμένου τμήματος κειμένου) Ctrl + V Paste (επικόλληση τμήματος κειμένου) Ctrl + S Save (αποθήκευση του τρέχοντος πηγαίου αρχείου) Ctrl+K+K Τοποθετεί σημάδι Bookmark και το αφαιρεί (toggle) F2, Shift-F2 Πηγαίνει στο επόμενο ή το προηγούμενο bookmark
Αρχικά θα μελετηθεί η μεθοδολογία παραγωγής οπτικών εφαρμογών με χρήση της βιβλιοθήκης.net (.NET Framework 4.0). Οι εφαρμογές αυτές ονομάζονται Windows Forms και αποτελούν παραδείγματα Διαχειριζόμενου Κώδικα - Managed Code. Οι εφαρμογές μεταγλωττίζονται σε ενδιάμεσο επίπεδο που ονομάζεται CLR (Common Language Runtime). Ο ενδιάμεσος κώδικας μεταγλωττίζεται κατά την εκτέλεση σε γλώσσα μηχανής κατάλληλη για την εκάστοτε πλατφόρμα υλικού και λειτουργικού συστήματος. Για την παραγωγή ενός τέτοιου Project θα πρέπει να επιλέξουμε File New Project και από το μενού που ακολουθεί να επιλέξουμε Visual C++ και Windows Forms Application. Τέλος θα πρέπει να επιλέξουμε το όνομα του Project και το Φάκελο (Folder) στον οποίο θα δημιουργηθεί.
Κατά την παραγωγή του Project παράγεται μία βασική φόρμα με το όνομα Form1 που αποτελεί το βασικό παράθυρο της εφαρμογής που θα εμφανιστεί κατά την εκτέλεση. Για κάθε φόρμα παράγεται ένα αντίστοιχο αρχείο.h που περιέχει την δήλωση της κλάσης της φόρμας, και περιέχει ολόκληρο τον κώδικα που σχετίζεται με αυτήν, συμπεριλαμβανομένων των ρουτινών διαχείρισης συμβάντων (event handlers). Π.χ. στο αρχείο «Form1.h» η δήλωση της κλάσης της φόρμας θα είναι: public ref class Form1 : public System::Windows::Forms::Form { } Η φόρμα είναι στην ουσία ένα πλαίσιο πάνω στο οποίο ενσωματώνονται άλλα αντικείμενα όπως Μενού, Κουμπιά, Κουτιά εισαγωγής κειμένου, Ετικέτες κ.λ.π. Τα αρχικά ονόματα της φόρμας και του αρχείου.h μπορούν να τροποποιηθούν κατά βούληση
Κατά την προβολή της φόρμας δηλαδή του Form1.h σε Design Mode εμφανίζονται στο δεξιό άκρο του IDE δύο βοηθητικά Panel: Το Toolbox που περιέχει λίστα με τα Controls που μπορεί ο προγραμματιστής να ενσωματώσει επάνω στην βασική φόρμα, και Τα Properties (ιδιότητες) που καθορίζουν ένα σημαντικό αριθμό από ιδιότητες του επιλεγμένου κάθε φορά αντικειμένου. Τα Controls που ενσωματώνονται στην φόρμα αποτελούν αντικείμενα άλλων κλάσεων που εισάγονται ως μέλη δεδομένα στην κλάση της φόρμας (data members) με την αρχή της περιεκτικότητας: private: System::Windows::Forms::Button^ button1;
Τα Properties (Ιδιότητες) αποτελούν εγγενή μέλη δεδομένα της κλάσης του κάθε αντικειμένου που καθορίζουν την εμφάνιση ή την συμπεριφορά του. Το κάθε Property μπορεί να είναι διαφορετικού τύπου: Απλών τύπων όπως int, bool ή αντικείμενα κλάσεων όπως Size(Width, Height) Η τοποθέτηση των τιμών που έχουν καθοριστεί για κάθε ιδιότητα μέσω του Panel Properties γίνεται κατά την εκτέλεση της μεθόδου void InitializeComponent(void) { // Form1 this->text = L"Form1"; // Button1 this->button1->name = L"button1"; } που αποτελεί βασική μέθοδο της κλάσης της φόρμας και εκτελείται κατά την αρχικοποίησή της.
Στο Panel με τις Ιδιότητες των αντικειμένων διακρίνουμε και ένα εικονίδιο με ένα κίτρινο κεραυνό το οποίο μας εμφανίζει τα Events του αντικειμένου Για κάθε event εμφανίζεται στα δεξιά του το όνομα της ρουτίνας διαχείρισης του Event, εφόσον έχουμε δημιουργήσει τέτοια ρουτίνα για το Event αυτό Για να δημιουργήσουμε ρουτίνα διαχείρισης ενός συμβάντος κάνουμε διπλό κλίκ επάνω στο συμβάν και δημιουργείται μία κενή ρουτίνα στην οποία θα πρέπει να γράψουμε τον επιθυμητό κώδικα διαχείρισης του συμβάντος. private: System::Void button1_click (System::Object^ sender, System::EventArgs^ e) { MessageBox::Show("Button is pressed", "My Application", MessageBoxButtons:: OKCancel, MessageBoxIcon::Asterisk); }
1. Δημιουργία ενός νέου Project εφαρμογής.net με την επιλογή File New Project Windows Forms Application 2. Αλλαγή των ιδιοτήτων της βασικής φόρμας, άμεσα (π.χ. αλλαγή μεγέθους) ή μέσω του panel Properties, σύμφωνα με τις απαιτήσεις της εφαρμογής. 3. Ενσωμάτωση στη φόρμα αντικειμένων (Controls) από το Toolbox με διαδικασία drag&drop ή click-select-click-drop. 4. Αλλαγή των ιδιοτήτων των αντικειμένων άμεσα ή με τη βοήθεια του panel Properties. 5. Συγγραφή των ρουτινών διαχείρισης συμβάντων (event handlers) για την φόρμα και τα αντικείμενα (για όποια αντικείμενα και για όποια συμβάντα χρειάζεται) μέσα στο Form1.h 6. Μεταγλώττιση του κώδικα (compile) και διόρθωση των σφαλμάτων 7. Κτίσιμο του εκτελέσιμου (exe) με την επιλογή Build Project / Build Solution όπου γίνεται η σύνδεση (linking) με τις βιβλιοθήκες και διόρθωση τυχόν σφαλμάτων. 8. Εκτέλεση της εφαρμογής (Start Debugging) και δοκιμή.
Κάθε αντικείμενο (Φόρμα, Κουμπί, Ετικέτα,...) που χρησιμοποιούμε από την εργαλειοθήκη του MS Visual Studio το χειριζόμαστε μέσω των Ιδιοτήτων του (Properties) μέσω των Μεθόδων του (Methods) και μέσω των Συμβάντων του (Events). Οι ιδιότητες είναι στην ουσία μέλη-δεδομένα (data members) της κλάσης του κάθε αντικειμένου που μπορούν να καθοριστούν είτε κατά τη σχεδίαση (design time) είτε κατά την εκτέλεση (run time) της εφαρμογής (π.χ. τίτλος, χρώμα, μέγεθος, font, κ.λ.π.). Οι μέθοδοι είναι συναρτήσεις-μέλη (function members) της κλάσης του κάθε αντικειμένου που μας επιτρέπουν να χειριζόμαστε τα δεδομένα της κλάσης (π.χ. Button1->Focus(), Form1->Close() ). Τα συμβάντα είναι ενέργειες που μπορεί να κάνει ο χρήστης με το συγκεκριμένο αντικείμενο (π.χ. διπλό κλικ, πάτημα κουμπιού, αλλαγή κειμένου, επιλογή από μενού, αλλαγή μεγέθους, drag&drop κ.λ.π.). Για όσα συμβάντα χρειάζεται, ο χρήστης αναπτύσσει τον κώδικα διαχείρισης του συμβάντος (event handler) όπου καθορίζεται το τί θα συμβεί όταν λάβει χώρα το συγκεκριμένο event (π.χ. Click, KeyPress, Resize, TextChanged, κ.λ.π.)
Οι ιδιότητες των αντικειμένων καθορίζουν συγκεκριμένα χαρακτηριστικά εμφάνισης και λειτουργίας των Controls και μπορούν να καθορίζονται είτε κατά την σχεδίαση είτε κατά την εκτέλεση. Κάθε Ιδιότητα αποτελείται από δύο πεδία: όνομα ιδιότητας και τιμή. Όλες οι ιδιότητες απλές και σύνθετες αποτελούν αντικείμενα κλάσεων του CLI (Common Language Interface). Μπορεί να είναι πολλών ειδών: 1. Πεδία Κειμένου: π.χ. Button->Text 2. Ιδιότητες Boolean: (true/false) π.χ. TextBox->AllowDrop 3. Επεκτάσιμα Πεδία ( ) : Αποτελούν Structures (Classes) των περισσότερων του ενός πεδίων π.χ. Form->Location (X,Y) 4. Πεδία Ενέργειας: ( ) Απαιτούν μία ενέργεια όπως η υπόδειξη ενός αρχείου εικόνας π.χ. Form->Icon 5. Αριθμητικές Ιδιότητες: π.χ. Button->TabIndex 6. Απαριθμητοί Τύποι: TextBox->BorderStyle = Fixed3D
Οι μέθοδοι των αντικειμένων είναι συναρτήσεις μέσω των οποίων χειριζόμαστε τα δεδομένα και τις ιδιότητες των αντικειμένων. Είναι δηλαδή συναρτήσεις-μέλη των κλάσεων των αντικειμένων. Οι μέθοδοι μπορεί να παίρνουν ή να μην παίρνουν παραμέτρους που καθορίζουν την λειτουργία τους και μπορεί να επιστρέφουν ή να μην επιστρέφουν κάποιο αποτέλεσμα (void) Παραδείγματα : Form1->Activate(), TextBox->AppendText( Hello ), CheckBox1->Hide(), Label1->Invalidate(), PictureBox1->Refresh(),
Τα συμβάντα είναι ενέργειες που μπορεί να κάνει ο χρήστης με το συγκεκριμένο αντικείμενο (π.χ. διπλό κλικ, πάτημα κουμπιού, αλλαγή κειμένου, επιλογή από μενού, αλλαγή μεγέθους, drag&drop κ.λ.π.) Τα Windows ειδοποιούν την εφαρμογή για ένα event στέλνοντας σε αυτήν ένα μήνυμα (windows message). Υπάρχουν περίπου 175 διαφορετικά μηνύματα. Η ρουτίνα διαχείρισης του event δημιουργείται πατώντας διπλό κλικ στο event στο Panel με τα Properties και εφόσον έχουμε επιλέξει το κατάλληλο Control. Στη συνέχεια γράφουμε τον κώδικα. Παράδειγμα: private: System::Void button1_click(system::object^ sender, System::EventArgs^ e) { this->close(); }
Οι Event handlers έχουν τουλάχιστον μία παράμετρο (System::Object ^ sender) που είναι ένα tracking handle (Λαβή Εντοπισμού) για το αντικείμενο που παρήγαγε το μήνυμα. Μπορεί δύο αντικείμενα να μοιράζονται τον ίδιο Event Handler. Παράδειγμα : Αν έχουμε σε μία φόρμα δύο κουμπιά με ονόματα Show και Hide μπορεί να έχουν την ίδια ρουτίνα για το Click event τους με όνομα button_click που να είναι ως εξής : private: System::Void button_click(system::object^ sender, System::EventArgs^ e) {if (sender==hide) label1->hide(); else label1->show(); } Τα ονόματα των event handlers μπορούν να αλλαχτούν από τον χρήστη. Η ρουτίνα button_click θα δημιουργηθεί για το event του πρώτου button και θα επιλεγεί για το ίδιο event του δεύτερου button.
Αποτελεί ένα προκατασκευασμένο διάλογο που χρησιμοποιείται για την εμφάνιση μηνυμάτων. Εμφανίζεται καλώντας την μέθοδο Show της βασικής κλάσης: MessageBox::Show( Μηνυμα, Τίτλος", MessageBoxButtons::OKCancel, MessageBoxIcon::Asterisk); MessageBoxButtons : καθορίζει ποια κουμπιά θα εμφανιστούν Μέλη: AbortRetryIgnore, OK, OKCancel, RetryCancel, YesNo, YesNoCancel. MessageBoxIcon : καθορίζει το εικονίδιο που θα εμφανιστεί στο παράθυρο. Μέλη : Asterisk, Error, Exclamation, Hand, Information, None, Question, Stop, Warning.
Επιστρέφει αποτέλεσμα τύπου System.Windows.Forms::DialogResult που έχει μία από τις τιμές : Abort, Cancel, Ignore, No, None, OK, Retry, Yes. Παράδειγμα: // Initializes the variables to pass to the MessageBox::Show method String^ message = "You did not enter a name. Cancel this operation?"; String^ caption = "No Name Specified"; MessageBoxButtons buttons = MessageBoxButtons::YesNo; System::Windows::Forms::DialogResult result; // Displays the MessageBox result = MessageBox::Show( message, caption, buttons ); if ( result == ::DialogResult::Yes ) { this->close(); } //κλείσιμο του γονικού παραθύρου
Η μέθοδος Show μπορεί να κληθεί και με διαφορετιοκό αριθμό παραμέτρων, όπως Show(Text) Show(IWin32Window, Text) Show(Text, Caption) Show(IWin32Window, Text, Caption) Show(Text, Caption, MessageBoxButtons) Show(IWin32Window, Text, Caption, MessageBoxButtons) Show(Text, Caption, MessageBoxButtons, MessageBoxIcon) Show(IWin32Window, Text, Caption, MessageBoxButtons, MessageBoxIcon) Η παράμετρος IWin32Window καθορίζει το handle του παραθύρου μπροστά από το οποίο θα εμφανιστεί το MessageBox
Δημιουργία νέου project Windows Forms. Αλλαγή του Text της Form1 σε «Ασκηση 1-1». Ενσωμάτωση κουμπιού από το Toolbox. Αλλαγή του Text σε Close. Δημιουργία Event handler για το event OnClick. private: System::Void button1_click(system::object^ sender, System::EventArgs^ e) { this->close(); }
Δημιουργία νέου project. Επανάληψη των βημάτων της άσκησης 1-1. Ενσωμάτωση δεύτερου κουμπιού και αλλαγή του Text σε «Display». Ενσωμάτωση TextBox. Δημιουργία Event Handler για το Click Event του δεύτερου κουμπιού. private: System::Void button2_click(system::object^ sender, System::EventArgs^ e) { MessageBox::Show(textBox1->Text,"Άσκηση 1-2", MessageBoxButtons::OKCancel,MessageBoxIcon::Asterisk); }
Δημιουργούμε νέο Project και τοποθετούμε τα Controls στις θέσεις τους. Αλλάζουμε το Text στα Controls Γράφουμε τους Event Handlers: private: System::Void button5_click (System:: Object^ sender, System::EventArgs^ e) { textbox1->clear(); textbox2->clear(); textbox3->clear(); } private: System::Void button7_click (System:: Object^ sender, System::EventArgs^ e) { this->close(); }
private: System::Void button1_click (System:: Object^ sender, System::EventArgs^ e) { double n1,n2; if (IsNumber(textBox1->Text) && IsNumber(textBox2->Text) ) { n1=convert::todouble(textbox1->text); n2=convert::todouble(textbox2->text); if (sender==button1) textbox3->text= Convert::ToString(n1+n2); else if (sender==button2) textbox3->text= Convert::ToString(n1-n2); else if (sender==button3) textbox3->text= Convert::ToString(n1*n2); else if (sender==button4) textbox3->text= Convert::ToString(n1/n2); } }
private: System::Boolean IsNumber(String^ s) { double d; return Double::TryParse(s,d); } Για την επιλογή «Σχετικά με την Εφαρμογή»: Δημιουργούμε νέα Φόρμα (Solution Explorer->Header Files-> Add ->New Item-> Windows Form) Στην κορυφή της Form1.h γράφουμε : #include Form2.h Και για να εμφανιστεί: private: System::Void button6_click (System:: Object^ sender, System::EventArgs^ e) { Form2^ frm = gcnew Form2; frm->showdialog(); }