Μεταφορά δεδομένων μεταξύ φορμών σε CSharp

0

Μεταφορά δεδομένων μεταξύ φορμών σε Visual CSharp 2005

Μία από τις μεγαλύτερες «σπαζοκεφαλιές» του Visual Studio 2005 και γενικά του αντικειμενοστραφούς προγραμματισμού, είναι η κλήση ιδιοτήτων, controls και γενικά στοιχείων μιας φόρμας από μία άλλη. Λόγω της δομής της αντικειμενοστρέφειας, η γνωστή από παλαιότερες γλώσσες προγραμματισμού τεχνική, της απευθείας κλήσης, απαγορεύεται. Για να γίνει λοιπόν μια τέτοια κλήση, πρέπει να χρησιμοποιηθεί μια σύνθετη τεχνική.

Έστω ότι έχω την Form1 και την Form2. Αν λοιπόν θέλω μέσα από την Form2 να θέσω τιμή σε ένα TextBox (έστω textBox1) που ανήκει στην Form1 πρέπει να ακολουθήσω την παρακάτω διαδικασία:

Βήμα 1:

Αρχικά θα πρέπει να αλλάξω τον modifier του textBox1 ή οποιουδήποτε στοιχείου θα θέλω να έχω πρόσβαση έξω από την φόρμα στην οποία ανήκει, σε public. Π.χ. για το textBox1 θα πρέπει να το κάνω:

public TextBox textBox1;

Σημείωση: Το βήμα αυτό μπορεί να γίνει και από τις ιδιότητες (Properties) του ίδιου του αντικειμένου (εδώ textBox1).

Βήμα 2:

Πηγαίνω στην Form1 και προσθέτω στο event του κουμπιού που ανοίγει την Form2 το tmpObject.mainForm=this. Ο κώδικάς μου δηλαδή θα πρέπει να μοιάζει με το παρακάτω τμήμα:

Form2 tmpObject=new Form2();
tmpObject.mainForm=this; //*******
tmpObject.Show();

Βήμα 3:

Πηγαίνω στον κώδικα της Form2 και στην αρχή του γράφω:

public Form1 mainForm; //*******
public Form2()
{
InitializeComponent();
}

Στην ουσία, στο τμήμα αυτό του κώδικα δημιουργώ ένα αντικείμενο τύπου Form1 μέσα στην Form2, και το ονομάζω mainForm. Αυτό ονομάζεται και αντικείμενο – «σκιά».

Βήμα 4:

Σε οποιοδήποτε τμήμα της Form2 μπορώ να καλέσω στοιχεία ή controls της Form1 χρησιμοποιώντας το ((Form1)this.mainForm).ότιθέλω.

π.χ.

((Form1)this.mainForm).textBox1.Text=”Επιτέλους τα κατάφερα!!!”;

Φαίνεται δύσκολο και θέλει εξοικείωση με τον αντικειμενοστρεφή προγραμματισμό. Υπάρχουν και άλλοι τρόποι να γίνει η μεταφορά δεδομένων μεταξύ φορμών, ένας άλλος αρκετά διαδεδομένος είναι η προσέγγιση του constructor. Δεν έχει όμως πολλές δυνατότητες, καθώς ο τρόπος που παρουσιάζεται παραπάνω μπορεί να καλύψει όλες τις πιθανές περιπτώσεις που ο προγραμματιστής μπορεί να χρειαστεί (π.χ. μεταφορά πολλών αντικειμένων, πινάκων κλπ).

Blog Widget by LinkWithin

Γράψε ένα σχόλιο

© 2012 DigitalNews. All rights reserved.