Übergabe Objekt an verschiedene windows forms
Möchte ich weitergeben ein C# - Objekt zwischen win forms. Im moment habe ich das setup ein basic-Projekt zu lernen, wie dies zu tun ist, die besteht aus zwei Formulare - form1 und form2, und eine Klasse mit der Bezeichnung class1.cs enthält get-und set-Methoden zum setzen eines string-variable mit einem Wert, der eingegeben wird in form1. (Formular 2 soll der Wert gespeichert, in der class1-Objekt)
Wie kann ich den string-Wert aus dem Objekt, das Sie in der form1? Muss ich übergeben Sie es als parameter in form2?
Irgendwelche Kommentare/Hilfe wird appeciated!
Dank,
EDIT: Hier der code, ich habe im moment: (form1 hinzu.cs)
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
Form2 form2 = new Form2();
form2.Show();
}
private void button2_Click(object sender, EventArgs e)
{
if (textBox1.Text != "")
{
Class1 class1 = new Class1();
class1.setStringValue(textBox1.Text);
}
}
}
}
InformationsquelleAutor Theomax | 2010-06-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein paar verschiedene Möglichkeiten, dies zu tun, könntest du eine statische Klasse-Objekt, das obige Beispiel wäre ideal für diese Tätigkeit.
Brauchen Sie nicht auf die Instanz der Klasse, nennen wir es doch einfach
Wenn Sie möchten, eine Instanz von dem Objekt, das Sie übergeben können, die das class-Objekt, das Sie erstellen, auf Form1 in Form2 mit der folgenden.
Dann erstellen Sie eine property in Form2 zu akzeptieren, der Klasse object.
denken Sie daran, dass die Class1-Objekt einer globalen variable anstatt die schaffen es innerhalb von Taste 2 selbst.
Genau das habe ich mit statischen Klassen in einer Reihe von Orten, zu halten-Datenbank-Verbindung-details", " CurrentUser details. Nur vorsichtig sein, vor allem, wenn Sie Daten, die sich ändern könnte, können Sie am Ende mit out-of-date Informationen.
InformationsquelleAutor Paul Talbot
Ja, in Form1 deklarieren Sie eine Instanz von Class1, und legen Sie dann die Parameter wie benötigt, dann übergeben Sie es an Form2. Sie könnten zum Beispiel einen Konstruktor in Form2 und Class1-parameter. Unter der Annahme, dass Form2 Form1 erstellt, andernfalls müssen Sie die Möglichkeit haben, für Form1 zu finden Form2 übergeben die Instanz über.
Anstatt deklarieren
Form2 form2 = new ...
im Ereignishandler für button1, nur erklären, sondern es als Mitglied der Klasse. Auf diese Weise werden Sie in der Lage sein zu rufenForm2.Show()
im Ereignishandler für button1 und rufen Sie auch so etwas wieFrom2.ShowNewValues(class1)
im button2 handler.Hier finden Sie ein Beispiel für eine Klasse: csharp-station.com/Tutorials/Lesson07.aspx
Das macht Sinn, aber wäre ich zu haben, um get-und set-Methoden in class1.cs-und eine get-Methode in form2.cs zu bekommen, gespeicherten Daten in der Objekt-Instanz von class1? Oder würde ich rufen Sie die get-Methode in form2 Methode ShowNewValues()?
So oder so, aber ich würde es vermutlich tun, dass in der ShowNewValues Methode, die Sie möchten rufen Sie class1.GetSomething raus, die Werte und verwenden Sie Sie dann sofort. Obwohl möchten Sie vielleicht zu speichern Kopie der gesamten Instanz von class1 als Mitglied von Form2, wenn du gehst, verwenden Sie die gleichen Werte später zum Beispiel.
InformationsquelleAutor Hans Olsson
Da habe ich die Arbeit in ASP.Net in den letzten paar Jahren habe ich mir die Arbeit mit Newtonsoft.Json-eine Menge. Stellt sich heraus, groß zu sein in WinForms zu, und in diesem Fall schien zu vereinfachen, übergeben von Objekten zwischen Formen... sogar komplexe sind ein Kinderspiel!
Die Umsetzung ist wie folgt:
Auf das form load-Ereignis kannst du dann schnappen Sie sich Ihr Objekt:
Schließlich übergeben Sie das Objekt an die form:
Gewährt dem ursprünglichen ausgewählte Antwort ist wahrscheinlich einfacher, aber ich mag diesen Ansatz,
, wie es vermeidet die Notwendigkeit, replizieren Sie die Klasse in Ihrer form, die ich denke, macht es einfacher zu verwalten(Korrektur: Miss richtig Lesen die statische Klasse in dem Beispiel, zuerst dachte ich es repliziert wurde innerhalb der form).Hoppla falsch gelesen das erste Beispiel, siehe Korrektur.
InformationsquelleAutor Anthony Griggs