Komunikation zwischen 2 Formurlaren



  • nett gemeint aba hilft mir nicht wirklich weiter 😞 bei den Riesenquelltexten sehe ich nicht durch.



  • 🙄



  • vielen danke für den netten Smiley wenn du alles weißt kannst du mir ja auch so weiterhelfen....

    ich bin am lernen und hab nunmal fragen und dafür ist das Forum da dachte ich zumindest



  • Hi ...

    Bis vor einigen Tagen hatte ich damit auch meine Probleme. Include einfach deine 2. Form in die Form1.h, referenziere, und überlade deinen Konstruktor in der 2.ten Form:

    Form1.h (Hauptform)

    #include "Form2.h"
    ...
    ...
    ref class Form2;
    
    Form1(void)
    		{
    			InitializeComponent();	     // <-- Standard Konstruktor		
    		}
    

    Deine zweite Form wirst du wahrscheinlich etwa so aufrufen:

    Form2^ form2instanz = gcnew Form2 (this);           // <-- Adresse von Form1 übergeben
    form2instanz->Show ();
    

    Die Form2.h sieht dann etwa so aus:

    Form2.h

    #include "Form1.h"
    ...
    ...
    ref class Form1;
    ...
    Form1^ form1instanz;                                 // <-- Variable vom Typ Form1
    ...
    Hauptform(void)
    		{
    			InitializeComponent();	     // <-- Standard Konstruktor (wenn kein Parameter übergeben wird)		
    		}
    
    Form2 (Form1 ^instanz) // <-- überladen
    		{
                    InitializeComponent ();
                    form1instanz = instanz;              // <-- überladener Konstruktor (wenn ein Parameter übergeben wird - was ja bei unserem Aufruf der Form2 der Fall ist)
                    }
    

    Nun kannst du via form1instanz auf deine Memberfunktionen zugreifen:

    form1instanz->meineFunktionInDerForm1 ();
    

    Bin auch noch blutiger Anfänger - und für den Fall - dass das alles zu umständlich sein sollte - höre ich gerne zu 🙂



  • hab vielen Dank 🙂

    das probiere ich mal.



  • Hallo Shaun,

    ich hab das mal so probiert wie du es gepostet hast, aber bei mir kommen nur Fehlermeldungen:

    error C3145: "form1instanz": Eine globale oder statische Variable darf nicht den verwalteten Typ "Beispielprog::Form1 ^" aufweisen.
    Eine globale oder statische Variable oder ein Member eines systemeigenen Typs, der auf Objekte im gc-Heap verweist, kann nicht deklariert werden.

    Wie kann ich die beseitigen? Hast du da nen Tipp für mich?

    Danke..



  • Indem Du die Variablen Definition in die Klasse verlegst. (Jetzt ist sie ausserhalb).
    Simon



  • Das funktioniert leider immer noch nicht. Nachdem ich in Form2 oben #include "Form1.h" eingebunden habe, bringt er jetzt immer:

    error C2011: 'Beispielprog::Form1': 'class' Typneudefinition

    Egal wo ich das Zeug hinschreibe, diese Fehlermeldung geht nicht weg.



  • Zeig mal bitte den Code.



  • Na Klasse, jetzt hab ich solange rumgeschraubt, bis der Designer streikt 😞

    Jetzt sagt er: "Der Designer konnte für diese Datei nicht angezeigt werden, da keine der enthaltenen Klassen entworfen werden konnte."

    Sehr komisch, denn das Programm lässt sich ganz normal starten und es funzt auch soweit alles.

    Hier mal mein Code:

    #pragma once
    #include "Cherry.h"
    
    namespace chili {
    
    	using namespace System;
    	using namespace System::ComponentModel;
    	using namespace System::Collections;
    	using namespace System::Windows::Forms;
    	using namespace System::Data;
    	using namespace System::Drawing;
    	using namespace System::IO;
    	using namespace System::Text;
    
    	/// <summary>
    	/// Zusammenfassung für Form1
    	///
    	/// Warnung: Wenn Sie den Namen dieser Klasse ändern, müssen Sie auch
    	///          die Ressourcendateiname-Eigenschaft für das Tool zur Kompilierung verwalteter Ressourcen ändern,
    	///          das allen RESX-Dateien zugewiesen ist, von denen diese Klasse abhängt.
    	///          Anderenfalls können die Designer nicht korrekt mit den lokalisierten Ressourcen
    	///          arbeiten, die diesem Formular zugewiesen sind.
    	/// </summary>
    
    	public ref class Form1 : public System::Windows::Forms::Form
    	{
    	public:
    		Form1(void)
    		{
    			InitializeComponent();
    			//
    			//TODO: Konstruktorcode hier hinzufügen.
    			//
    		}
    
    		protected:
    		/// <summary>
    		/// Verwendete Ressourcen bereinigen.
    		/// </summary>
    		~Form1()
    		{
    			if (components)
    			{
    				delete components;
    			}
    		}
    
    	private: System::Windows::Forms::ListBox^  listBox1;
    	protected: 
    	private: System::Windows::Forms::StatusStrip^  statusStrip1;
    	private: System::Windows::Forms::ToolStripStatusLabel^  toolStripStatusLabel1;
    	private: System::Windows::Forms::Label^  label1;
    
    	private: System::Windows::Forms::Label^  label2;
    	private: System::Windows::Forms::Label^  label3;
    	private: System::Windows::Forms::Label^  label4;
    	private: System::Windows::Forms::RichTextBox^  RT1;
    	private: System::Windows::Forms::RichTextBox^  RT2;
    	private: System::Windows::Forms::RichTextBox^  RT3;
    
    	private: System::Windows::Forms::Label^  label5;
    	private: System::Windows::Forms::RichTextBox^  RT4;
    
    	private: System::Windows::Forms::Label^  label6;
    	private: System::Windows::Forms::RichTextBox^  RT5;
    
    	private: System::Windows::Forms::Label^  label7;
    	private: System::Windows::Forms::RichTextBox^  RT6;
    
    	private: System::Windows::Forms::Label^  label8;
    	private: System::Windows::Forms::RichTextBox^  RT7;
    
    	private: System::Windows::Forms::Label^  label9;
    	private: System::Windows::Forms::RichTextBox^  RT9;
    
    	private: System::Windows::Forms::Label^  label10;
    	private: System::Windows::Forms::RichTextBox^  RT10;
    
    	private: System::Windows::Forms::Label^  label11;
    	private: System::Windows::Forms::RichTextBox^  RT11;
    
    	private: System::Windows::Forms::Label^  label12;
    	private: System::Windows::Forms::RichTextBox^  RT8;
    
    	private: System::Windows::Forms::Label^  label13;
    
    	private: System::Windows::Forms::MenuStrip^  menuStrip1;
    	private: System::Windows::Forms::ToolStripMenuItem^  beendenToolStripMenuItem;
    	private: System::Windows::Forms::ToolStripMenuItem^  musikToolStripMenuItem;
    	private: System::Windows::Forms::Label^  label14;
    	private: System::Windows::Forms::PictureBox^  pictureBox1;
    	private: System::Windows::Forms::Label^  label15;
    	private: System::Windows::Forms::RichTextBox^  Autor;
    	private: System::Windows::Forms::PictureBox^  grün;
    	private: System::Windows::Forms::PictureBox^  rot;
    
    	private: System::Windows::Forms::ToolStripMenuItem^  infoToolStripMenuItem;
    
    	private:
    		/// <summary>
    		/// Erforderliche Designervariable.
    		/// </summary>
    		System::ComponentModel::Container ^components;
    
    #pragma region Windows Form Designer generated code
    		/// <summary>
    		/// Erforderliche Methode für die Designerunterstützung.
    		/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
    		/// </summary>
    		void InitializeComponent(void)
    		{
    			System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(Form1::typeid));
    			this->listBox1 = (gcnew System::Windows::Forms::ListBox());
    			this->statusStrip1 = (gcnew System::Windows::Forms::StatusStrip());
    			this->toolStripStatusLabel1 = (gcnew System::Windows::Forms::ToolStripStatusLabel());
    			this->label1 = (gcnew System::Windows::Forms::Label());
    			this->label2 = (gcnew System::Windows::Forms::Label());
    			this->label3 = (gcnew System::Windows::Forms::Label());
    			this->label4 = (gcnew System::Windows::Forms::Label());
    			this->RT1 = (gcnew System::Windows::Forms::RichTextBox());
    			this->RT2 = (gcnew System::Windows::Forms::RichTextBox());
    			this->RT3 = (gcnew System::Windows::Forms::RichTextBox());
    			this->label5 = (gcnew System::Windows::Forms::Label());
    			this->RT4 = (gcnew System::Windows::Forms::RichTextBox());
    			this->label6 = (gcnew System::Windows::Forms::Label());
    			this->RT5 = (gcnew System::Windows::Forms::RichTextBox());
    			this->label7 = (gcnew System::Windows::Forms::Label());
    			this->RT6 = (gcnew System::Windows::Forms::RichTextBox());
    			this->label8 = (gcnew System::Windows::Forms::Label());
    			this->RT7 = (gcnew System::Windows::Forms::RichTextBox());
    			this->label9 = (gcnew System::Windows::Forms::Label());
    			this->RT9 = (gcnew System::Windows::Forms::RichTextBox());
    			this->label10 = (gcnew System::Windows::Forms::Label());
    			this->RT10 = (gcnew System::Windows::Forms::RichTextBox());
    			this->label11 = (gcnew System::Windows::Forms::Label());
    			this->RT11 = (gcnew System::Windows::Forms::RichTextBox());
    			this->label12 = (gcnew System::Windows::Forms::Label());
    			this->RT8 = (gcnew System::Windows::Forms::RichTextBox());
    			this->label13 = (gcnew System::Windows::Forms::Label());
    			this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
    			this->beendenToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
    			this->musikToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
    			this->infoToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
    			this->label14 = (gcnew System::Windows::Forms::Label());
    			this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox());
    			this->label15 = (gcnew System::Windows::Forms::Label());
    			this->Autor = (gcnew System::Windows::Forms::RichTextBox());
    			this->grün = (gcnew System::Windows::Forms::PictureBox());
    			this->rot = (gcnew System::Windows::Forms::PictureBox());
    			this->statusStrip1->SuspendLayout();
    			this->menuStrip1->SuspendLayout();
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->pictureBox1))->BeginInit();
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->grün))->BeginInit();
    			(cli::safe_cast<System::ComponentModel::ISupportInitialize^  >(this->rot))->BeginInit();
    			this->SuspendLayout();
    
    usw.
    ..
    ..
    

    Was hab ich denn jetzt zerstört? 😕



  • Also, irgendwie hab ich jetzt den Designer geschrottet und weiß nicht wie. Oben bei "Ansicht" müsste Designer stehen. Für alle Formulare ist das auch so, außer für Form1. Wo ist der hin? Das Programm lässt sich ganz normal starten.



  • Wo ist denn der Code den du erstellt hast? Sehe nur einen Teil des vom Designer erzeugten Codes? Und poste mal die ganze Fehlermeldung.

    Hast du mal versucht die geänderten Codefragmente auszuschliessen? Klappt prima mit Kommentaren...


Anmelden zum Antworten