Μεταφορά δεδομένων μεταξύ φορμών σε Visual CSharp 2005
Μία από τις μεγαλύτερες «σπαζοκεφαλιές» του Visual Studio 2005 και γενικά του αντικειμενοστραφούς προγραμματισμού, είναι η κλήση ιδιοτήτων, controls και γενικά στοιχείων μιας φόρμας από μία άλλη. Λόγω της δομής της αντικειμενοστρέφειας, η γνωστή από παλαιότερες γλώσσες προγραμματισμού τεχνική, της απευθείας κλήσης, απαγορεύεται. Για να γίνει λοιπόν μια τέτοια κλήση, πρέπει να χρησιμοποιηθεί μια σύνθετη τεχνική.
Βήμα 1:
Αρχικά θα πρέπει να αλλάξω τον modifier του textBox1 ή οποιουδήποτε στοιχείου θα θέλω να έχω πρόσβαση έξω από την φόρμα στην οποία ανήκει, σε public. Π.χ. για το textBox1 θα πρέπει να το κάνω:
Σημείωση: Το βήμα αυτό μπορεί να γίνει και από τις ιδιότητες (Properties) του ίδιου του αντικειμένου (εδώ textBox1).
Βήμα 2:
Πηγαίνω στην Form1 και προσθέτω στο event του κουμπιού που ανοίγει την Form2 το tmpObject.mainForm=this. Ο κώδικάς μου δηλαδή θα πρέπει να μοιάζει με το παρακάτω τμήμα:
tmpObject.mainForm=this; //*******
tmpObject.Show();
Βήμα 3:
Πηγαίνω στον κώδικα της Form2 και στην αρχή του γράφω:
public Form2()
{
InitializeComponent();
}
Στην ουσία, στο τμήμα αυτό του κώδικα δημιουργώ ένα αντικείμενο τύπου Form1 μέσα στην Form2, και το ονομάζω mainForm. Αυτό ονομάζεται και αντικείμενο – «σκιά».
Βήμα 4:
Σε οποιοδήποτε τμήμα της Form2 μπορώ να καλέσω στοιχεία ή controls της Form1 χρησιμοποιώντας το ((Form1)this.mainForm).ότιθέλω.
π.χ.
Φαίνεται δύσκολο και θέλει εξοικείωση με τον αντικειμενοστρεφή προγραμματισμό. Υπάρχουν και άλλοι τρόποι να γίνει η μεταφορά δεδομένων μεταξύ φορμών, ένας άλλος αρκετά διαδεδομένος είναι η προσέγγιση του constructor. Δεν έχει όμως πολλές δυνατότητες, καθώς ο τρόπος που παρουσιάζεται παραπάνω μπορεί να καλύψει όλες τις πιθανές περιπτώσεις που ο προγραμματιστής μπορεί να χρειαστεί (π.χ. μεταφορά πολλών αντικειμένων, πινάκων κλπ).



