Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

05.07.2013, 18:03

C# & Wpf - Zugriff auf Methode des Hauptfensters

Hallo Community,

ich habe ein Hauptformular, dieses startet bei einem bestimmten Ereignis ein neues Fenster, welches dem Benutzer ermöglichen soll Einstellungen zu ändern.

C#-Quelltext

1
2
Einstellungen einstellung = new Einstellungen();
einstellung.ShowDialog();



Wie kann ich aber von dem Fenster "einstellung" auf die Methoden von MainWindow zugreifen?
Umgekehrt ist es ja kein Problem, ich müsste ja nur so etwas schreiben:

C#-Quelltext

1
einstellung.Speichern();

Gibt es irgendeine Möglichkeit, dass MainWindow ein Ereignis wie "closing" erhält, wenn das Einstellungsfenster geschlossen werden soll, damit ich den Inhalt der Steuerelemente noch übernehmen kann?


Mit freundlichen Grüßen,
MitgliedXYZ

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

05.07.2013, 18:14

Ich fände es ja sinnvoll, wenn "MainWindow" nach dem Schließen von "Einstellungen" die Werte aus diesem ausliest und selbst übernimmt. Wahlweise von MainWindow an Einstellungen ein Modell übergeben, welches der Einstellungs-Dialog ändert.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Beiträge: 5

Beruf: Fachinformatiker Anwendungsentwicklung

  • Private Nachricht senden

3

05.07.2013, 18:16

Hey,

ich verstehe nicht ganz warum du auf Methoden deiner MainForm zugreifen willst. Das was du vermutlich vor hast, könntest du mit einem EventHandler lösen. Du definierst einen EventHandler der die benötigten Informationen in Form eines eigenen EventArgs zurück gibt.
Dein Hauptfenster registriert dieses EventHandler und wird dann darüber informiert wenn du es im Einstellungsfenster auslöst.

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

4

05.07.2013, 18:21

Ja, so einen "EventHandler" meinte ich, hab damit aber bis jetzt noch nichts zu tun gehabt, da wenn ich nur für das aktuelle Form welche benötigt habe "Closing", etc., dann erstellt diese Visual Studio auf Klick automatisch. Wie habe ich da aber nun selbst vorzugehen?


Der EventHandler muss vermute ich mal irgendwo darunter

C#-Quelltext

1
2
Einstellungen einstellung = new Einstellungen();
einstellung.ShowDialog();

Aber wie genau und wie müsste die Methode aussehen, die von ihm ausgelöst wird?, könnte jemand vielleicht ein Beispiel, oder ein Tutorial posten?


Danke schon mal.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

05.07.2013, 18:24

Wieso genau brauchst Du den Event-Handler? Ist der Dialog denn nicht modal?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

05.07.2013, 18:25

Das hier ist eigentlich ganz gut um zu lernen wie man eigene Events definiert.

edit: Natürlich kann er auch ein Model reinstecken und hinterher auslesen, oder direkt auf dem Dialog die Änderungen auslesen, sollte aber Geschmackssache sein welche der Beiden Methoden man benutzen möchte.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

7

05.07.2013, 18:29

Wieso genau brauchst Du den Event-Handler? Ist der Dialog denn nicht modal?
Naja, das Formular - oder wie auch immer das jetzt in WPF heißt - enthält einfach ein paar Textfelder mit Beschriftungen, etc.. Wenn das Einstellungsfenster vom Benutzer wieder geschlossen wird hätte ich gerne das vorher (wie beim "Closing"-Event) ich im Hauptfenster noch die Möglichkeit habe die Werte der Textboxen in meine Variablen zu übernehmen und meine Methode zur Aktualisierung der Ansicht auszuführen.

Zu Frage zwei:
Was bedeutet "modal"? Da du aber so frägst, nehme ich mal an: Nein, mein Dialog ist nicht modal.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

05.07.2013, 18:36

Modal heißt, dass nur dieser Dialog aktuell angewählt werden kann und der darunter nicht in den Vordergrund geholt werden kann - laienhaft gesprochen.
Ich gehe aber davon aus, dass Du ihn genau so verwendest. Und wenn der Dialog geschlossen wird, kannst Du die Eigenschaften von diesem doch einfach abfragen. Ob er geschlossen wurde oder nicht, ist erstmal egal, die Instanz an sich ist doch noch da und auch noch gültig.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

9

05.07.2013, 18:56

Setz enfach dein EinstellungsObjekt als DataContext in deinem "Einstellungen"-Fenster und binde deine Controls direkt an Eigenschaften dieses Objektes. Dann brauchst da auch kein Fenster etwas vom anderen zu wissen.

Ich finde das gerade echt erschreckend, dass hier für eine GUI mit C# immer WPF vorgeschlagen wird aber das dann trotzdem wie WinForms verwendet wird 8|

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

05.07.2013, 19:33

Ich kann über WPF nix sagen, ich arbeite nur mit WinForms. Folglich lauten auch meine Empfehlungen entsprechend ;)
Also bitte, Blame mal etwas low halten oder richtig assoziieren.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige