Jump to content



Visual c++


panos2607

Recommended Posts

Προσπαθώ εδώ και καιρό να φτιάξω ένα app χρησιμοποιώντας c++ σε πλατφόρμα microsoft visual studio 2008 και έχω το εξής πρόβλημα συνέχεια. Ενώ μπορώ(χρησιμοποιώντας button) να πάω από την πρώτη φόρμα στην δεύτερη, δεν μπορώ να κάνω το αντίθετο.Δηλαδή να επιστρέψω(πάλι με χρήση button) από την δεύτερη φόρμα στην πρώτη... :wall:

Το ίδιο βέβαια γίνεται και με τις υπόλοιπες φόρμες...

Υπάρχει κάποιος γνώστης που να μπορεί να βοηθήσει;;;;

Ευχαριστώ εκ των προτέρων!!!

Link to comment
Share on other sites

Έχεις δίκιο...

Καταρχάς, έχω δημιουργήσει windows form application. Από εκεί και πέρα έχω σχεδιάσει τις φόρμες μου και προσπαθώ να τις συνδέσω. Για παράδειγμα έχω στην form1 ένα button next και θέλω να πάω στην form2. Το πετυχαίνω με τον εξής κώδικα στην form1:

public ref class Form1 : public System::Windows::Forms::Form

{

public: Form2^ FormB;

public:

Form1(void)

{

InitializeComponent();

FormB=gcnew Form2();

}

......

private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) {

FormB->Show();

this->Hide();

}

Αυτός είναι ο κώδικας στην form1. Στην form2 έχω βάλει πάλι ένα button back για να γυρίζει στην form1. Χρησιμοποιώ αντίστοιχο κώδικα στην form2 και μου βγάζει errors εκ τον οποίων κάποια αφορούν και τον κώδικα της form1 που πριν θεωρούταν σωστός και έτρεχε. Έχω δοκιμάσει και #include form1.h και ότι άλλο έχω βρει(και έχω καταλάβει βέβαια) σε διάφορα forums.

Ευχαριστώ :)

Link to comment
Share on other sites

Πάλι αυτό δεν λέει και πολλά... τι errors σου βγάζει ο compiler...?

Ο event handler από το κουμπί της φόρμας 2 που είναι...? Επειδή η φόρμα 2 είναι child στην φόρμα 1, αν then έχεις περάσει το this της 1 στην 2, τότε δεν μπορείς να αναφερθείς στην φόρμα 1 από την 2... θα πρέπει είτε ο event handler της φόρμας 2 να είναι στο ίδιο scope με την φόρμα 1, είτε να περάσεις στην 2 κάποιον function pointer ή τον this pointer της 1...

Άσχετο, αλλά όταν βλέπω πως κατάντησε η ms την c++, μου γυρνάνε τα μάτια, δεν ντρέπονται λίγο...?

Link to comment
Share on other sites

Προσπαθώ από εχθές να βρω κάτι με τα στοιχεία που μου έδωσες αλλά μάλλον είμαι πολύ πρωτάρης. Δεν καταλαβαίνω πως θα περάσω το this της μιας φόρμας στην άλλη :confused:

Τα errors που μου βγάζει ο compiler όταν κάνω include το header file της πρώτης φόρμας στην δεύτερη είναι τύπου missing type specifier, undeclared identifier, syntax error και όλα αυτά στον κώδικα της πρώτης φόρμας που μέχρι πριν λίγο ήταν σωστός και έτρεχε...

Ευχαριστώ για το ενδιαφέρον!!!

Link to comment
Share on other sites

Δεν ξέρω τι ισχύει ακριβώς στην ms vc++ για τις φόρμες, αλλά υποθέτω ότι τουλάχιστον ένας constructor μιας φόρμας πρέπει λογικά να παίρνει σαν παραμέτρους ένα parent και ένα modal switch... το parent είναι ο pointer της φόρμας η οποία δημιουργεί μια άλλη φόρμα, αυτό στην ουσία είναι το this... ίσως by default ο parent pointer να είναι 0 ή null, αλλά αν θες αλληλεπίδραση και από το child->parent, τότε αυτός ο pointer θα πρέπει να συμπληρώνεται με το this της πρώτης φόρμας...

Πάνω-κάτω αυτά είναι στάνταρ σε c++ και gui, οπότε κάτι τέτοιο πρέπει να συμβαίνει και στην περίπτωσή σου...

Link to comment
Share on other sites

O πιό απλός τρόπος είναι να δημιουργήσεις τη φόρμα στο project και απλά να την κάνεις show/hide. Εσύ τη δημιουργείς δυναμικά κι έτσι δε γίνεται bind το event του click στο καινούριο button. Πάντως αν θέλεις να παιδευτείς με το event ψάξε για addhandler. Και ο καλύτερος τρόπος να βρεις τη FormA μέσω της FormB είναι με this.parent()

Link to comment
Share on other sites

  • 3 weeks later...

Δες καλύτερα κάποιο παράδειγμα της MS. Το windows programming δεν είναι τόσο προφανές αν δεν έχεις καταλάβει την αρχιτεκτονική των windows. Ακόμη και να το κάνεις να δουλέψει δεν είναι σίγουρο ότι το έκανες σωστά! Αυτό μπορεί μακροπρόθεσμα στην εφαρμογή που κάνεις να σε οδηγήσει σε αδιέξοδο. Αυτό που ρωτάς π.χ. είναι βασικότατο ζήτημα σε εφαρμογή με πολλά παράθυρα. Και για να σε προβληματίσω περισσότερο, θες να κάνεις MDI εφαρμογή ή απλά ζητάς ένα dialog-box; Έχει μεγάλη διαφορά στο πώς θα το στήσεις.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.