Hi Marco,
ohne Arc Net auf die Füße treten zu wollen, aber das was er oben
gschrieben hat, ist etwas überdimensioniert (Singleton) bzw. völlig
überflüssig (globales Objekt). Das Problem läßt sich recht einfach
lösen, hier ein Beispiel für die Datenklasse:
1 | public class DataModel {
|
2 | public string stringProperty {
|
3 | ...
|
4 | }
|
5 | ...
|
6 | }
|
Die Klasse Form1 hat einen Konstruktor, der als Parameter eine Referenz
auf das DataModel-Objekt übergeben bekommt:
1 | public class Form1 {
|
2 | private DataModel _dataModel;
|
3 | public Form1( DataModel dataModel ) {
|
4 | _dataModel = dataModel;
|
5 | }
|
6 | public void Foo() {
|
7 | Console.Writeln( "Test: "+_dataModel.stringProperty );
|
8 | }
|
9 | }
|
Die Klasse Form2 ist analog aufgebaut. Alternativ zur Übergabe der
Daten-Objekt-Referenz über den Konstruktor kann man ein
"write-only"-Property bei den beiden Form-Klassen implementieren.
Bei der Initialisierung Deines Programms erzeugst Du jeweils eine
Instanz von DataModel, Form1 und Form2:
1 | public static void MyProgram( ... ) {
|
2 | ...
|
3 | DataModel myModel = new DataModel();
|
4 | Form1 myForm1 = new Form1( myModel );
|
5 | Form2 myForm2 = new Form2( myModel );
|
6 | ...
|
7 | }
|
Hier noch die Variante mit Form-Property:
1 | public static void MyProgram( ... ) {
|
2 | ...
|
3 | DataModel myModel = new DataModel();
|
4 | Form1 myForm1 = new Form1();
|
5 | myForm1.DataModel = myModel;
|
6 | Form2 myForm2 = new Form2();
|
7 | myForm2.DataModel = myModel;
|
8 | ...
|
9 | }
|
Da gibt's erst mal nichts kompliziertes oder geheimnisvolles. Es geht
allerdings etwas mehr ins Eingemachte, wenn eine Änderung in Form1 auch
automatisch in Form2 angezeigt werden soll. Wirklich schwierig ist das
aber auch nicht: Form1 ändert ein Property von DataModel. Bei dieser
Änderung erzeugt DateModel ein Ereignis (Event), das von Form1 und Form2
dahingehend verarbeitet wird, daß Form1 und Form2 sich aufgrund der
Änderung in DataModel aktualisieren. Zu diesem Zweck registrieren sich
beide Form-Objekte bei DataModel als Konsumenten des/der Ereignis/se. In
C# verwendet man i.d.R. Delegates für diesen Zweck.
Ich denke, Du hast jetzt erst mal etwas zum Basteln.
Grüße
Markus