Datenaustausch Form2 zu Form1

theplake3000

Grünschnabel
Hi Leute

Ich benutze Visual c++ 2005 Express.

Vorab ich bin Anfänger und ihr werdet euch sich totlachen aber folgendes Problem:

Ich hab ein Form1 erstellt wo ich über ein Menu ein zweites Form2 aufmache.Dieses Form2 hat eine TextBox1 und ein button1.Wenn ich jetzt etwas in die Textbox1 eintrage und den Button1 drücke soll dieser text in Form1 übertragen werden (wohin ist jetzt egal ich habs in ein label1 versucht).So und das schaffe ich einfach nicht.Ich bin soweit das ich den text von der Textbox1 in ein String einlese aber das wars auch schon.

Kann mir da einer helfen?
hier mein kompletter Code:

Form1.h

Code:
#pragma once

#include "Form2.h"

namespace training {

	using namespace System;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <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::MenuStrip^  menuStrip1;

	protected: 
	private: System::Windows::Forms::ToolStripMenuItem^  dateiToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  bearbeitenToolStripMenuItem;
	private: System::Windows::Forms::ToolStripMenuItem^  kateiHinzufügenToolStripMenuItem;
	public: System::Windows::Forms::TabPage^  tabPage1;
	private: System::Windows::Forms::Label^  label1;
	private: System::Windows::Forms::TabControl^  tabControl1;

	private: System::ComponentModel::IContainer^  components;


	private:
		/// <summary>
		/// Erforderliche Designervariable.
		/// </summary>


#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>

	public:
		void InitializeComponent(void)
		{
			this->menuStrip1 = (gcnew System::Windows::Forms::MenuStrip());
			this->dateiToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->bearbeitenToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->kateiHinzufügenToolStripMenuItem = (gcnew System::Windows::Forms::ToolStripMenuItem());
			this->label1 = (gcnew System::Windows::Forms::Label());
			this->tabPage1 = (gcnew System::Windows::Forms::TabPage());
			this->tabControl1 = (gcnew System::Windows::Forms::TabControl());
			this->menuStrip1->SuspendLayout();
			this->tabControl1->SuspendLayout();
			this->SuspendLayout();
			// 
			// menuStrip1
			// 
			this->menuStrip1->Items->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(2) {this->dateiToolStripMenuItem, 
				this->bearbeitenToolStripMenuItem});
			this->menuStrip1->Location = System::Drawing::Point(0, 0);
			this->menuStrip1->Name = L"menuStrip1";
			this->menuStrip1->RenderMode = System::Windows::Forms::ToolStripRenderMode::System;
			this->menuStrip1->Size = System::Drawing::Size(989, 24);
			this->menuStrip1->TabIndex = 0;
			this->menuStrip1->Text = L"menuStrip1";
			this->menuStrip1->ItemClicked += gcnew System::Windows::Forms::ToolStripItemClickedEventHandler(this, &Form1::menuStrip1_ItemClicked);
			// 
			// dateiToolStripMenuItem
			// 
			this->dateiToolStripMenuItem->Name = L"dateiToolStripMenuItem";
			this->dateiToolStripMenuItem->Size = System::Drawing::Size(44, 20);
			this->dateiToolStripMenuItem->Text = L"Datei";
			// 
			// bearbeitenToolStripMenuItem
			// 
			this->bearbeitenToolStripMenuItem->DropDownItems->AddRange(gcnew cli::array< System::Windows::Forms::ToolStripItem^  >(1) {this->kateiHinzufügenToolStripMenuItem});
			this->bearbeitenToolStripMenuItem->Name = L"bearbeitenToolStripMenuItem";
			this->bearbeitenToolStripMenuItem->Size = System::Drawing::Size(70, 20);
			this->bearbeitenToolStripMenuItem->Text = L"Bearbeiten";
			// 
			// kateiHinzufügenToolStripMenuItem
			// 
			this->kateiHinzufügenToolStripMenuItem->Name = L"kateiHinzufügenToolStripMenuItem";
			this->kateiHinzufügenToolStripMenuItem->Size = System::Drawing::Size(155, 22);
			this->kateiHinzufügenToolStripMenuItem->Text = L"Katei Hinzufügen";
			this->kateiHinzufügenToolStripMenuItem->Click += gcnew System::EventHandler(this, &Form1::kateiHinzufügenToolStripMenuItem_Click);
			// 
			// label1
			// 
			this->label1->AutoSize = true;
			this->label1->Location = System::Drawing::Point(276, 89);
			this->label1->Name = L"label1";
			this->label1->Size = System::Drawing::Size(35, 13);
			this->label1->TabIndex = 2;
			this->label1->Text = L"label1";
			
			// 
			// tabControl1
			// 
			
			this->tabControl1->Location = System::Drawing::Point(2, 211);
			this->tabControl1->Name = L"tabControl1";
			this->tabControl1->Padding = System::Drawing::Point(7, 3);
			this->tabControl1->SelectedIndex = 0;
			this->tabControl1->Size = System::Drawing::Size(986, 339);
			this->tabControl1->TabIndex = 1;
			// 
			// Form1
			// 
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(989, 553);
			this->Controls->Add(this->label1);
			this->Controls->Add(this->tabControl1);
			this->Controls->Add(this->menuStrip1);
			this->MainMenuStrip = this->menuStrip1;
			this->Name = L"Form1";
			this->Text = L"Training";
			this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load);
			this->menuStrip1->ResumeLayout(false);
			this->menuStrip1->PerformLayout();
			this->tabControl1->ResumeLayout(false);
			this->ResumeLayout(false);
			this->PerformLayout();

		}

#pragma endregion
		
	private: System::Void Form1_Load(System::Object^  sender, System::EventArgs^  e) {
			 }
	public: System::Void kateiHinzufügenToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
	            Form2 ^frm2 = gcnew Form2();
	            frm2->ShowDialog(this);

				/*this->tabPage1 = (gcnew System::Windows::Forms::TabPage());   
				this->tabControl1->Controls->Add(this->tabPage1);
				this->tabPage1->Text = frm2->str;	*/
                			
				

				}

private: System::Void menuStrip1_ItemClicked(System::Object^  sender, System::Windows::Forms::ToolStripItemClickedEventArgs^  e) {
		 }
};
}


Form2.h
Code:
#pragma once

#include "Form1.h"

namespace training {


using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;

	/// <summary>
	/// Zusammenfassung für Form2
	///
	/// 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 Form2 : public System::Windows::Forms::Form
	{
	
	public:
		Form2(void)
		{
			InitializeComponent();
			//
			//TODO: Konstruktorcode hier hinzufügen.
			//
       
		}

	protected:
		/// <summary>
		/// Verwendete Ressourcen bereinigen.
		/// </summary>
		~Form2()
		{
			if (components)
			{
				delete components;
			}
		}
	private: System::Windows::Forms::Label^  label1;
	public: System::Windows::Forms::Button^  button2;
	private: System::Windows::Forms::Button^  button1;
	private: System::Windows::Forms::TextBox^ textBox1;

	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)
		{
			this->label1 = (gcnew System::Windows::Forms::Label());
			this->textBox1 = (gcnew System::Windows::Forms::TextBox());
			this->button1 = (gcnew System::Windows::Forms::Button());
			this->button2 = (gcnew System::Windows::Forms::Button());
			this->SuspendLayout();
			// 
			// label1
			// 
			this->label1->AutoSize = true;
			this->label1->Location = System::Drawing::Point(80, 9);
			this->label1->Name = L"label1";
			this->label1->Size = System::Drawing::Size(225, 13);
			this->label1->TabIndex = 0;
			this->label1->Text = L"Bitte geben sie einen Namen für die Kartei ein:";
			this->label1->TextAlign = System::Drawing::ContentAlignment::MiddleCenter;
			// 
			// textBox1
			// 
			this->textBox1->Location = System::Drawing::Point(83, 42);
			this->textBox1->Name = L"textBox1";
			this->textBox1->Size = System::Drawing::Size(221, 20);
			this->textBox1->TabIndex = 1;
			// 
			// button1
			// 
			this->button1->Location = System::Drawing::Point(219, 114);
			this->button1->Name = L"button1";
			this->button1->Size = System::Drawing::Size(72, 22);
			this->button1->TabIndex = 2;
			this->button1->Text = L"OK";
			this->button1->UseVisualStyleBackColor = true;
			this->button1->Click += gcnew System::EventHandler(this, &Form2::button1_Click);
			// 
			// button2
			// 
			this->button2->Location = System::Drawing::Point(311, 114);
			this->button2->Name = L"button2";
			this->button2->Size = System::Drawing::Size(77, 21);
			this->button2->TabIndex = 3;
			this->button2->Text = L"Cancel";
			this->button2->UseVisualStyleBackColor = true;
			this->button2->Click += gcnew System::EventHandler(this, &Form2::button2_Click);
			// 
			// Form2
			// 
			this->AcceptButton = this->button1;
			this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
			this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
			this->ClientSize = System::Drawing::Size(407, 153);
			this->Controls->Add(this->button2);
			this->Controls->Add(this->button1);
			this->Controls->Add(this->textBox1);
			this->Controls->Add(this->label1);
			this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::FixedDialog;
			this->Name = L"Form2";
			this->Text = L"Kartei Hinzufügen";
			this->ResumeLayout(false);
			this->PerformLayout();

		}

		
#pragma endregion

		
			 
   
	public: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
				String ^str = this->textBox1->Text;
				
				
/*				tabPage1 = (gcnew System::Windows::Forms::TabPage());   
				tabControl1->Controls->Add(tabPage1);
				tabPage1->Text = str;	  */
				Close();
											 
			 }
   public: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
				Close();
				
				 }
	};
}
 
Hallo,

ich weiß nicht, ob ich dir helfen kann, viel Erfahrung habe ich auch nicht,
aber, da sich keine gemeldet hat, werde ich es versuchen.

1. Du erzeugst deine Form2 in einer Member-Funktion der Form1

Code:
public: System::Void kateiHinzufügenToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
	            Form2 ^frm2 = gcnew Form2();
	            frm2->ShowDialog(this);

ich würde frm2 als Member-Variable anlegen, damit ist der Zugriff auf dessen Daten einfacher

2. Beim Klicken auf Form2.Button1 brauchst du das Objekt der Form1
mit GetParent() der Basis-Klasse solltest du es eigentlich bekommen.
Danach casten auf (Form1) und auf die Daten zugreifen
// Mit ShowDialog(this) setzt du das Parent-Fenster

3. Du bindest Form1.h in Form2.h und Form2.h in Form1.h ein, gibts da keine Probleme?

Mein Rat ohne Gewähr,
ich arbeite nur mit nicht verwalteten Klassen

Gruß

titanic
 
Hallo,

ich weiß nicht, ob ich dir helfen kann, viel Erfahrung habe ich auch nicht,
aber, da sich keine gemeldet hat, werde ich es versuchen.

1. Du erzeugst deine Form2 in einer Member-Funktion der Form1

Code:
public: System::Void kateiHinzufügenToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) {
	            Form2 ^frm2 = gcnew Form2();
	            frm2->ShowDialog(this);

ich würde frm2 als Member-Variable anlegen, damit ist der Zugriff auf dessen Daten einfacher

2. Beim Klicken auf Form2.Button1 brauchst du das Objekt der Form1
mit GetParent() der Basis-Klasse solltest du es eigentlich bekommen.
Danach casten auf (Form1) und auf die Daten zugreifen
// Mit ShowDialog(this) setzt du das Parent-Fenster

3. Du bindest Form1.h in Form2.h und Form2.h in Form1.h ein, gibts da keine Probleme?

Mein Rat ohne Gewähr,
ich arbeite nur mit nicht verwalteten Klassen

Gruß

titanic
zu3. nee da gibt es keine Probleme.zumindest meckert er nicht.
Erstmal Danke.
Aber könntest du mir das als syntax geben?
Oder direkt so schreiben das es bei mir passt?
 
hallo,
tut mir leid keine Zeit,

aber hab herausgefunden, dass man über die Eigenschaft Owner der Form auf die Form, die bei SchowDlg(...pDlg) übergeben wurde auf das Objekt greifen kann

PS. GetParent() gibts bei Form nicht, Entschuldigung, ist nur bei MFC
Vielleicht hilfts dir ja erstmal weiter. Ich schau mal nächste Woche wieder rein.

nur kurz:
Code:
		// Member Form1
	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
	{
		pForm2 =  new Form2();
		pForm2->ShowDialog(this);
	}


		//Member von Form2
	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
			 {
				 Form* f  =  this->Owner; /* CForm1-Objekt*/
			 }
 
Zuletzt bearbeitet:
Ich habe eigentlich genau das selbe Problem. Hat sich noch etwas Neues ergeben?
Den so wie es hier geschrieben steht, funktioniert es nicht.
 
Hallo,

bin wieder da. Hier ein kleines funktionierendes Beispiel. Dazu
muß ich allerdings sagen, das ist mein erstes .net Projekt

Gruß titanic
 

Anhänge

  • test_9.zip
    15,1 KB · Aufrufe: 181
Ja das ist ja auch C#.

Ich habs jetzt anders gelöst.Zwar total bekloppt aber es funktioniert.
Ich hab einfach den Text der Textbox in ein String eingelesen Und dann lasse ich Form2 via Close(); schliessen.Dann Springt Der focus automatisch wieder zurück in den Eventhandler von Form1 und ich kann weiter arbeiten.Dadurch wird alles RICHTIG umständlich.

Nur ich hab fast in ALLE Foren geschrieben die es gibt und keiner antwortet auf die Frage konkret oder gibt Beispiele.Da hab ichs halt so gelöst.
 
Zurück