Form1 und Form2 .. Text Übergabe

liquidbeats

Erfahrenes Mitglied
habe da mal eine frage.
kurtze erläuterung.

Also habe Form1 und Form2
in Form1 habe ich ein Label das mir die auswahl von Form2 anzeigen soll.

Wie Übergebe ich jetzt das gewählte vin Form2 an Form1 (ausgabe.Text = "Kein wert vorhanden";)

Danke schonmal .. Gruß andy
 
also habe folgendes gefunden

http://msdn.microsoft.com/library/d...ingValueFromAnotherFormVisualC.asp?frame=true

nur will das nicht so wirklich funktionieren, er sagt mir
Dem Feld 'Return.Form1.otherForm' wird nie etwas zugewiesen, und es hat immer seinen Standardwert von null.
Obwohl ich es so gemacht habe wie in der MSDN beschrieben.

Sitz da nun schon weiss der geier wie lange drann und wollte eigentlich selber drauf kommen, nur kapier ich das nicht.

Kann mir da jemand helfen?

Gruß Andy
 
Hi.

Interessant wäre dazu dein Code den du geschrieben hast. Ist zwar schön wenn du einem Beispiel der MSDN nachgetan hast, könnte aber doch sein das du etwas übersehen hast.
Also bitte zeig mal deinen entsprechenden Code.

Zu deinem Problem - nicht jetzt zum Beispiel, sondern Allgemein - du brauchst in Form2 einen Verweis auf deine Form1, in Form1 einen öffentlichen Member der den Wert vom Label setzt, und ein Event in Form2 das bei der Änderung einer Auswahl (von was auch immer) über den öffentlichen Member von Form1 das Label ändert.

Hier ein Beispiel:

PHP:
using System;
using System.Collections;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

public class WindowsForm : System.Windows.Forms.Form
{
	public static void Main()
	{
		Application.Run(new WindowsForm());
	}
	
	// Das Label in dem der Text angezeigt
	// werden soll
	private Label lbl;
	
	// Ein öffentlicher Member mit dem auf
	// das Label zugegriffen wird.
	// Genauergesagt ist es eine Propertie / Eigenschaft
	public string Caption
	{
		set { lbl.Text = value; }
		get { return lbl.Text; }
	}
	
	// Konstruktor des ersten Formulars
	// Label erzeugen etc.
	public WindowsForm()
	{
		this.Text = "Form1";
		
		this.Width = 320;
		this.Height = 240;
		
		lbl = new Label();
		lbl.Width = 280; lbl.Height = 40;
		lbl.Location = new Point(20,100);
		
		this.Controls.Add(lbl);
		
		// Hier wird das 2te Formular erzeugt
		// Im Konstruktor übergeben wir einen
		// Verweis auf dieses Form
		// damit wir dann im 2ten Form darauf
		// zugreifen können
		WindowsForm2 wf2 = new WindowsForm2(this);
		wf2.Show();
		wf2.Focus();
	}
}

public class WindowsForm2 : System.Windows.Forms.Form
{
	
	// ein privater Member
	// hier wird der Verweis auf Form1
	// gespeichert, damit wir wieder darauf
	// zugreifen können
	private WindowsForm parent;
	
	// Der Konstruktor - erwartet einen Verweis
	// auf ein WindowsForm ..
	public WindowsForm2(WindowsForm parent)
	{
		// der private Member wird gesetz ..
		this.parent = parent;
		
		this.Text = "Form2";
		
		this.Width = 320;
		this.Height = 240;
		
		// Textbox hinzufügen und Event erzeugen,
		// bei einer Textänderung soll dann in der
		// ersten Form das Label geändert werden ..
		TextBox myTextbox = new TextBox();
		myTextbox.Width = 280;
		myTextbox.Location = new Point(20,110);
		myTextbox.TextChanged += new EventHandler(this.textBox_TextChanged);
		this.Controls.Add(myTextbox);
	}
	
	private void textBox_TextChanged(object sender, EventArgs ea)
	{
		// über den Verweis auf das erste Form
		// wird der Eigenschaft 'Caption' 
		// der neue Wert zugewiesen
		parent.Caption = ((TextBox)sender).Text;
	}
}


MfG,
Alex
 
ok dann poste ich mal den code,
leider nur die entsprechende zeit da sonst source zu lang :rolleyes:

Form1
Code:
public Form2 OtherForm;
privatevoid GetOtherFormTextBox()
	{
	textBox1.Text = OtherForm.TextBox1.Text;
	}

Form2
Code:
public TextBox TextBox1
	{
	get
	{
	return textBox1;
	}
}


also ich habe das alles etwas geändert, eben weil es nicht funktionierte.
Ich dachte es würde klappen wenn ich es so mache wie in der MSDN beschrieben, war jedoch nicht so.
jetzt habe ich 2 mal ne TextBox jeweile eine in jedem Form.
Aber es klapt auf Teufel komm raus nicht.

Gruß Andy
 
Hast dir meinen Code angesehen? - Und ok, ein bissl mehr Code darf es sein. Die Konstruktoren zum Beispiel und wie du die 2te Form erzeugst.
Mh, sehr viel Code wirds ja wohl noch nicht sein, also zeige vielleicht doch den ganzen.
 
Also er will den gesamten source nicht annehmen, ist auch einfach zu lang zumal ich da auch sachen drinne habe die damit nix zu tun haben wie messagebox usw.
eben um mich einzuspielen.
Probieren geht überstudieren :)

Darum häng ich mal alles als gepackte datei an.
so hast du alles und schick dir da nicht halbe sachen.


Gruß andy
[edit]
hm ... er hats irgend wie nicht angenommen .. also
also ab uffm space damit
www.djtutorials.de/return.zip
das muss klappen

Gruß Andy

[edit2]
Form2 .
Code:
 using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace Return
{
/// <summary>
/// Zusammenfassung für Form2.
/// </summary>
public class Form2 : System.Windows.Forms.Form
{
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.Button button1;
/// <summary>
/// Erforderliche Designervariable.
/// </summary>
private System.ComponentModel.Container components = null;
public Form2()
{
//
// Erforderlich für die Windows Form-Designerunterstützung
//
InitializeComponent();
//
// TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu
//
}
/// <summary>
/// Die verwendeten Ressourcen bereinigen.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
	if(components != null)
	{
	 components.Dispose();
	}
}
base.Dispose( disposing );
}
 
public TextBox TextBox1
{
get
{
	return textBox1;
}
}
#region Vom Windows Form-Designer generierter Code
/// <summary>
/// Erforderliche Methode für die Designerunterstützung. 
/// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
/// </summary>
private void InitializeComponent()
{
this.textBox1 = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
// 
// textBox1
// 
this.textBox1.Location = new System.Drawing.Point(8, 8);
this.textBox1.Name = "textBox1";
this.textBox1.TabIndex = 2;
this.textBox1.Text = "";
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
// 
// button1
// 
this.button1.Location = new System.Drawing.Point(120, 8);
this.button1.Name = "button1";
this.button1.TabIndex = 1;
this.button1.Text = "&Close";
this.button1.Click += new System.EventHandler(this.button1_Click);
// 
// Form2
// 
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(200, 37);
this.Controls.Add(this.button1);
this.Controls.Add(this.textBox1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "Form2";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Texteingabe";
this.Load += new System.EventHandler(this.Form2_Load);
this.ResumeLayout(false);
}
#endregion
private void Form2_Load(object sender, System.EventArgs e)
{
 
}
private void button1_Click(object sender, System.EventArgs e)
{
this.Close();
}
public void textBox1_TextChanged(object sender, System.EventArgs e)
{
 
}
}
}
 
Zuletzt bearbeitet:
Form1
Code:
 using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace Return
{
 /// <summary>
 /// Zusammenfassung für Form1.
 /// </summary>
 public class Form1 : System.Windows.Forms.Form
 {
  /// <summary>
  /// Erforderliche Designervariable.
  /// </summary>
  private System.ComponentModel.Container components = null;
  public Form1()
  {
   //
   // Erforderlich für die Windows Form-Designerunterstützung
   //
   InitializeComponent();
   //
   // TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu
   //
  }
  /// <summary>
  /// Die verwendeten Ressourcen bereinigen.
  /// </summary>
  protected override void Dispose( bool disposing )
  {
   if( disposing )
   {
	if (components != null) 
	{
	 components.Dispose();
	}
   }
   base.Dispose( disposing );
  }
  #region Vom Windows Form-Designer generierter Code
  /// <summary>
  /// Erforderliche Methode für die Designerunterstützung. 
  /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
  /// </summary>
  private void InitializeComponent()
  {
   System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1));
   this.textBox1 = new System.Windows.Forms.TextBox();
   this.button1 = new System.Windows.Forms.Button();
   this.button2 = new System.Windows.Forms.Button();
   this.pictureBox1 = new System.Windows.Forms.PictureBox();
   this.mainMenu1 = new System.Windows.Forms.MainMenu();
   this.menuItem1 = new System.Windows.Forms.MenuItem();
   this.menuItem2 = new System.Windows.Forms.MenuItem();
   this.menuItem3 = new System.Windows.Forms.MenuItem();
   this.menuItem4 = new System.Windows.Forms.MenuItem();
   this.button3 = new System.Windows.Forms.Button();
   this.SuspendLayout();
   // 
   // textBox1
   // 
   this.textBox1.Location = new System.Drawing.Point(8, 0);
   this.textBox1.Name = "textBox1";
   this.textBox1.Size = new System.Drawing.Size(168, 20);
   this.textBox1.TabIndex = 0;
   this.textBox1.Text = "";
   // 
   // button1
   // 
   this.button1.Location = new System.Drawing.Point(8, 24);
   this.button1.Name = "button1";
   this.button1.Size = new System.Drawing.Size(88, 24);
   this.button1.TabIndex = 1;
   this.button1.Text = "Neues Fenster";
   this.button1.Click += new System.EventHandler(this.button1_Click);
   // 
   // button2
   // 
   this.button2.Location = new System.Drawing.Point(104, 24);
   this.button2.Name = "button2";
   this.button2.Size = new System.Drawing.Size(72, 24);
   this.button2.TabIndex = 2;
   this.button2.Text = "Close";
   this.button2.Click += new System.EventHandler(this.button2_Click);
   // 
   // pictureBox1
   // 
   this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
   this.pictureBox1.Location = new System.Drawing.Point(192, 0);
   this.pictureBox1.Name = "pictureBox1";
   this.pictureBox1.Size = new System.Drawing.Size(32, 24);
   this.pictureBox1.TabIndex = 3;
   this.pictureBox1.TabStop = false;
   // 
   // mainMenu1
   // 
   this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
					   this.menuItem1,
					   this.menuItem3});
   // 
   // menuItem1
   // 
   this.menuItem1.Index = 0;
   this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
					   this.menuItem2});
   this.menuItem1.Text = "&File";
   this.menuItem1.Click += new System.EventHandler(this.menuItem1_Click);
   // 
   // menuItem2
   // 
   this.menuItem2.Index = 0;
   this.menuItem2.Text = "&Beenden";
   this.menuItem2.Click += new System.EventHandler(this.menuItem2_Click);
   // 
   // menuItem3
   // 
   this.menuItem3.Index = 1;
   this.menuItem3.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
					   this.menuItem4});
   this.menuItem3.Text = "?";
   // 
   // menuItem4
   // 
   this.menuItem4.Index = 0;
   this.menuItem4.Text = "&Info";
   this.menuItem4.Click += new System.EventHandler(this.menuItem4_Click);
   // 
   // button3
   // 
   this.button3.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
   this.button3.Location = new System.Drawing.Point(192, 32);
   this.button3.Name = "button3";
   this.button3.Size = new System.Drawing.Size(32, 16);
   this.button3.TabIndex = 4;
   this.button3.Text = "!";
   this.button3.Click += new System.EventHandler(this.button3_Click);
   // 
   // Form1
   // 
   this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
   this.ClientSize = new System.Drawing.Size(240, 57);
   this.Controls.Add(this.button3);
   this.Controls.Add(this.pictureBox1);
   this.Controls.Add(this.button2);
   this.Controls.Add(this.button1);
   this.Controls.Add(this.textBox1);
   this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
   this.MaximizeBox = false;
   this.Menu = this.mainMenu1;
   this.Name = "Form1";
   this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
   this.Text = "Texteingabe";
   this.Load += new System.EventHandler(this.Form1_Load);
   this.ResumeLayout(false);
  }
  #endregion
  /// <summary>
  /// Der Haupteinstiegspunkt für die Anwendung.
  /// </summary>
  [STAThread]
  static void Main() 
  {
   Application.Run(new Form1());
  }
  private void Form1_Load(object sender, System.EventArgs e)
  {
  }
  private System.Windows.Forms.TextBox textBox1;
  private System.Windows.Forms.Button button1;
  private System.Windows.Forms.Button button2;
  private System.Windows.Forms.PictureBox pictureBox1;
  private System.Windows.Forms.MainMenu mainMenu1;
  private System.Windows.Forms.MenuItem menuItem1;
  private System.Windows.Forms.MenuItem menuItem2;
  private System.Windows.Forms.MenuItem menuItem3;
  private System.Windows.Forms.MenuItem menuItem4;
  private System.Windows.Forms.Button button3;
  public Form2 OtherForm;
  private void GetOtherFormTextBox()
  {
   textBox1.Text = OtherForm.TextBox1.Text;
   this.Update();
  }
  private void button1_Click(object sender, System.EventArgs e)
  {
   Form2 frm = new Form2();
   frm.Show();
  }
  private void button2_Click(object sender, System.EventArgs e)
  {
   this.Close();
  }
  private void menuItem1_Click(object sender, System.EventArgs e)
  {
  
  }
  private void menuItem2_Click(object sender, System.EventArgs e)
  {
   this.Close();
  }
  private void menuItem4_Click(object sender, System.EventArgs e)
  {
   MessageBox.Show("Kleines testprogramm zum testen\nder wertübergabe von Fenster zu Fenster\n\nby Andy","Info",
	MessageBoxButtons.OK,
	MessageBoxIcon.Asterisk);
  }
  private void button3_Click(object sender, System.EventArgs e)
  {
  
  }
 }
}
 
Selig sind die Programmieranfänger, die ihren ganzen Code noch von Hand schreiben um zu lernen.

Folgende Code-Stücke hätten mich interessiert.

PHP:
public Form2 OtherForm;
private void GetOtherFormTextBox()
{
	textBox1.Text = OtherForm.TextBox1.Text;
	this.Update();
}

private void button1_Click(object sender, System.EventArgs e)
{
	Form2 frm = new Form2();
	frm.Show();
}

PHP:
public Form2()
{
	//
	// Erforderlich für die Windows Form-Designerunterstützung
	//
	InitializeComponent();

	//
	// TODO: Fügen Sie den Konstruktorcode nach dem Aufruf von InitializeComponent hinzu
	//
}

In dem einem EventHandler erzeugst du zwar eine neue Instanz von Form2, nur weisst du sie nicht deiner Variable otherForm zu. Also, zwischen otherForm und der Instanz von Form2 besteht überhaupt keine Verbindung.

Hättest du meinen liebevoll, von Hand geschriebenen Source-Code angesehen, hättest du vielleicht entdeckt, dass da zwischen manchen Variablen irgendwie beziehungen hergestellt werden müssen, so in Form von Zuweisungen.

Mein Tipp an dich.
Lies dir bitte ein Buch über die Grundlagen von C# durch und vergiss erstmal WindowsForm. Lerne die Grundlagen, verstehe die Grundlagen.
Objekterzeugung, Variablenübergabe etc. gibts auch bei Konsolenanwendungen (die man weit schneller von Hand schreiben kann, weil man nicht die ganzen Controls erzeugen muss.)

In der Schule beginnt man ja auch nicht gleich Wahrscheinlichkeitsrechnung, oder sonst einem höheren Stuff. Nein, man lernt mal die Grundlagen - Die Zahlen, Zeichen etc. die zum Rechnen nötig sind.
Ausserdem, schreibe deinen SourceCode komplett von Hand. Wenn du Konsolenanwendungen schreibst wirst eh dazu gezwungen, weils dafür keinen Designer gibt

Der Designer ist ein tolles Hilfsmittel, es erspart einem viel Zeit. Dennoch sollte man nicht damit beginnen.

Und so komplexe Anwendungen wirst du nicht schreiben das du Hunderte von Zeilen nur für die Controls hast, ausserdem ists eine gute Übung, und du müsstest in der Doku nachsehen welche Eigenschaften für was sind, beziehungsweise wie die Klassennamen der Controls sind.

In deinem anderem Thread habe ich dir einen Link zu einem online Buch geschickt, lies dir dieses einmal durch.

MfG,
Alex
 
Alexander Schuc hat gesagt.:
Selig sind die Programmieranfänger, die ihren ganzen Code noch von Hand schreiben um zu lernen.
ja ich weiss :rolleyes:, wie das nunmal so ist mit ungeduldigen kinder, die wollen immer gleich alles sofort.

Ich werde mir deinen rat mal zu herzen nehmen und ein paar dos dinger schreiben.
eine boot-diekette könnt ich gebrauchen :)

Ich denke das mein Fehler immer der gleiche ist.
ich habe es einfach wie PHP gesehen, letzendlich ist das wesentlich komplexer.
Werde wohl nicht drumherum kommen klein anzufangen :rolleyes: wenn ich es wirklich beabsichtige.


Bin dir jedenfals Dankbar für die tips und korregierung.


Gruß Andy
 
liquidbeats hat gesagt.:
Ich werde mir deinen rat mal zu herzen nehmen und ein paar dos dinger schreiben.
eine boot-diekette könnt ich gebrauchen :)

Wozu denn eine Boot-Diskette?

Das sind keine DOS-Dinger. Auch wenns in einer Konsole abläuft, das Programm, es ist eine .net Anwendung. Und diese braucht ein geladenes Windows mit einem .net Framework welches das Programm dann ausführt. Unter DOS könntest du sie nicht ausführen.
Und denk nicht, dass diese Programme nur komische kleine Dinge können. Sie können genausoviel als wenn sie eine graphische Oberfläche hätten. Nur ist das UserInterface eben ein anderes.
 
Zurück