Zuweisung funktioniert nicht
-
Hallo Leute!
Und zwar folgendes: ich habe zwei Fenster - das Zweite wird (durch Button-Klick im Ersten) geöffnet.
Im zweiten Fenster soll der User ein paar Sachen in zwei Textboxen eingeben -> wird per OK-Button geschlossen und in ein Objekt der Klasse "Region" übertragen - hier mal der Code:namespace WindowsFormsApplication1 { public partial class Form2 : Form { public Form2() { InitializeComponent(); Region Daten = new Region(); Daten.SetName(F2textBox1.Text); Daten.SetLand(F2textBox2.Text); } } }
Soweit so gut...nun will ich aber, dass diese Textzeilen, die ich dem Region-Objekt zugewiesen habe, im ersten Fenster (Hauptfenster) in einem ListView erscheinen.
Hab mir das irgendwie so vorgestellt:
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void HFButton1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.ShowDialog(); if (f2.DialogResult == DialogResult.OK) { Region dieRegion = new Region(); dieRegion = f2.Daten; ListViewItem item1 = new ListViewItem(); item1.SubItems.Add(dieRegion.name); item1.SubItems.Add(dieRegion.land); this.HFlistView1.Items.Add(item1); } } } }
Ich bin umgestiegen von C++/.NET auf C#/.NET - bei C++ ging das noch, dass in der if-Anweisung die Zuweisung dieRegion = f2.Daten funktioniert. Aber jetzt bei C# geht das nicht mehr, aber von der Logik müsste das doch hinhauen? Weiß jmd. weiter?
-
Nöö wie soll das hinhauen? Dein Daten-Objekt existiert nur im Scope des Form2-Ctors. Du musst das Daten-OBjekt schon irgendwie verfügbar machen in Form2.
-
Hmm, aber ich hab doch ein Form2-Objekt erstellt?
Wie kann man das zur Verfügung stellen? In C++ kannte ich noch "include", aber das gibt's hier nicht mehr?
-
? Dir fehlen Grundlagen.
Klaro hast du ein Form2 OBjekt erstellt, aber du hast nur im Scope des Ctors ein Regionobjekt erstellt, sobald der Scope des Ctors verlassen wurde ist das nicht für dich Verfügbar. Du müsstest eine Propertie in Form2 erstellen die dieses Regionobjekt hält.
-
Oh, oh, da fehlen aber ein paar Grundlagen -)
Schau dir mal die Linksammlung "Kommunikation von 2 Forms" unter http://www.mycsharp.de/wbb2/thread.php?goto=lastpost&threadid=5960 an.
Stichworte: Eigenschaften (Properties) und Ereignisse (Events)
-
Jaa da fehlen einige Grundlagen
Ich hab bisher nur mit C++ gearbeitet...da war mir das mit den Properties alles klar, aber hier muss ich mich wohl nochmal einlesen - danke für den Link
-
Hmm - ich verstehe nicht so ganz, wie ich das mit den properties machen könnte?!
in C++ hätte ich es so gemacht:
Form2:
public: property Region^ Daten { Region^ get() { Region^ temp = gcnew Region; temp->Name = this->TextBox1->Text; temp->Land = this->TextBox2->Text; return temp; } }
aber in C# gibt es ja dieses schöne Schlüsselwort "property" nicht mehr
-
Google doch einfach nach c# property. Das geht soch viel schneller als hier auf eine Antwort zu warten.
-
namespace WindowsFormsApplication1 { public partial class Form2 : Form { public Region Daten; // Property public Form2() { InitializeComponent(); Daten = new Region(); Daten.SetName(F2textBox1.Text); Daten.SetLand(F2textBox2.Text); } } }
-
Danke Dummy
Genau das hab ich gesucht ^^Das komische ist nur, dass er einen normalen string akzepiert und den dann auch in meiner Form1 im ListView anzeigt, aber wenn ich den Text der Textbox möchte, wird dieser nicht im ListView von Form1 angezeigt?
namespace WindowsFormsApplication1 { public partial class Form2 : Form { public Region Daten; public Form2() { InitializeComponent(); Daten = new Region(); Daten.RName = this.F2textBox1.Text; Daten.LName = "test"; } } }
...also das "test" wird in mein Form1-ListView übertragen - wunderbar...aber der Text von F2TextBox1 nicht?
-
neuerDummy123 schrieb:
namespace WindowsFormsApplication1 { public partial class Form2 : Form { public Region Daten; // Property } }
Sieht für mich eigendlich wie eine normale Variable aus... Für ne Property müßte da mindestens stehen:
namespace WindowsFormsApplication1 { public partial class Form2 : Form { public Region Daten { get; set; } // (Auto generated) Property } }
-
@waldmensch7,
1. Bitte verwende die Bezeichnung C++/CLI, wenn du C++ in Verbindung mit .Net meinst. Das ist nämlich eine eigenständige Sprache und unabhängig von C++.
2. Dein Code hätte so nicht mal in C++/CLI funktioniert. Da fehlen mehr als nur Grundlagen. Das sieht beinahe so aus, als hättest du noch nie programmiert. Kauf dir ein Anfängerbuch oder lies zumindest ein paar Tutorials durch. Bereits der C# Programming Guide würde sicherlich viel helfen.Grüssli
-
@ dravere: ich muss dir widersprechen, in C++/CLI funktioniert das aber! hab es ausgetestet
...und ja ich bin jetzt nicht der überprogrammier-crackhab sonst nur c++ konsolenmäßig bisschen was gemacht.
...und was jetzt an meinem code falsch ist, weiß ich immer noch nicht - anstatt dass mich jeder auf die fehlenden grundlagen aufmerksam macht, hätte man doch was schreiben können, was zur lösung beiträgt? verstehe ich nicht...
oder ist das nur ein forum für cracks?
-
waldmensch7 schrieb:
@ dravere: ich muss dir widersprechen, in C++/CLI funktioniert das aber! hab es ausgetestet
Ich programmiere auch C++/CLI und das was du uns hier präsentiert hast, funktioniert so ganz sicher in C++/CLI auch nicht. Dann machst du nämlich in C++/CLI was anders. Wahrscheinlich machst du in C++/CLI, was du weiter vorne gezeigt hast. Aber das ist definitiv was anderes.
Deine Zuweisung anDaten.RName
findet im Konstruktor statt. Wenn sich später dann einmalF2textBox1.Text
ändert, springt dieser Wert nicht automatisch aufDaten.RName
über. Dort bleibt natürlich der alte Wert enthalten, welcher du im Konstruktor zugewiesen hast. Und genau gleich läuft dies auch in C++/CLI ab.Wenn du den Code aus C++/CLI willst:
namespace WindowsFormsApplication1 { public partial class Form2 : Form { public Region Daten { get { Region daten = new Region(); daten.RName = F2textBox1.Text; daten.LName = F2textBox2.Text; return daten; } } public Form2() { InitializeComponent(); } } }
waldmensch7 schrieb:
...und was jetzt an meinem code falsch ist, weiß ich immer noch nicht - anstatt dass mich jeder auf die fehlenden grundlagen aufmerksam macht, hätte man doch was schreiben können, was zur lösung beiträgt? verstehe ich nicht...
oder ist das nur ein forum für cracks?Dieses Forum ist nicht dazu gedacht, den Leuten das Lesen abzunehmen. Das ist ein Forum mit freiwilligen, da ist es doch nur höfflich, wenn man sich selber zumindest mal mit den Grundlagen auseinandersetzt, bevor man hier angerennt kommt.
Grüssli