Laden...

Wie werden mehrere Forms über Veränderungen benachrichtigt?

Erstellt von chrisrabe vor 3 Jahren Letzter Beitrag vor 3 Jahren 701 Views
C
chrisrabe Themenstarter:in
25 Beiträge seit 2014
vor 3 Jahren
Wie werden mehrere Forms über Veränderungen benachrichtigt?

Hallo, ich komme wieder einmal nicht weiter und hätte gerne einen Ansatz für folgendes Problem:

Ich habe ein Programm, welches mehrere Forms geöffnet haben kann.
Ein Übersichtsform soll die wichtigsten Inhalte aller offenen Forms darstellen. Im einfachsten Fall z.B. eine Namensliste.

Mein Wunsch wäre, im Übersichtsform so eine Art Broadcast oder Event zu schicken, auf welches alle Forms hören und ihre Antwort zurück schicken.

Was wären denn hier die richtigen Stichworte zur Suche? Mit Broadcast finde ich immer wieder UDP Ansätze, ich dachte mehr an Events. Unter 'Callback' hatte ich bislang vermutet eine Lösung zu finden, aber zum Erfolg komme ich damit auch nicht.

u.U. wichtig zu wissen ist: dass das Übersichtsfor immer erst geöffnet wird, wenn die anderen Forms bereits laufen. Diese können sich also nicht am Ü.Form anmelden, die Suche/Anfrage muss also vom Ü.Form ausgelöst werden.

ich schätze mein Ansatz ist nicht der richtige?

Viele Grüße
Christian

309 Beiträge seit 2020
vor 3 Jahren

Du könntest eine Klasse machen die alle Fensteraufrufe verwaltet und eine Liste mit Referenzen der Windows hält. Dann könntest du dich noch an das FormClosing-Event hängen um mitzubekommen wenn eins geschlossen wird.

F
10.010 Beiträge seit 2004
vor 3 Jahren

Dazu benutzt man entweder Events oder eines der vielen MessageFrameworks wie z.b. TineMessanger.

16.832 Beiträge seit 2008
vor 3 Jahren

Als Teil des Ökosystems gibts dazu .NET Reactive bzw. ReactiveUI

4.939 Beiträge seit 2008
vor 3 Jahren

Die gerade geöffneten Forms gibt es als Eigenschaft Application.OpenForms.
Falls du nur für bestimmte Forms die Liste anzeigen möchtest, könntest du ein Interface dafür definieren und per [FAQ] Casten aber richtig: Boxing/Unboxing - () / is / as / Pattern Matching abfragen.

3.825 Beiträge seit 2006
vor 3 Jahren

Bei mir sieht das so aus wenn man das Programm schließt :


mel += "Folgende Fenster sind noch geöffnet :";
foreach (Form frm in Application.OpenForms)
	mel += "\r\n" + frm.Text + " : " + frm.Name;

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

T
2.223 Beiträge seit 2008
vor 3 Jahren

@BerndFfm
Ich würde dir an der Stelle den StringBuilder empfehlen um solche Meldungen per Schleife + Zeilenumbrüche umzusetzen.
Gerade auf anderen Platformen als Windows wirst du mit den hart codierten Zeilenumbruchzeichen Probleme kriegen.
Ebenfalls lässt sich hier auch mit String Interpolation arbeiten oder String.Format, was man über den Builder auch mit AppendFormat + AppendLine abbilden kann.

T-Virus

Hinweis von Abt vor 3 Jahren

Inhalt als Offtopic markiert.

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

C
chrisrabe Themenstarter:in
25 Beiträge seit 2014
vor 3 Jahren

Hallo,

danke für die regen Ideen.
Bevor wir zu weit vom eigentlichen Ziel abweichen muss ich nochmal klarer sagen was gemeint ist. Letztendlich ist nicht das Ziel tatsächlich irgendwie die offenen Forms genannt zu bekommen, sorry für die unklare Formulierung.

Es ist so:
Das Windows Forms Programm hat eine Menge zuschaltbarer Funktionsmodule. Diese werden, je nach Konfiguration des Programmes, freigeschaltet, z.B.:

  • Option Temperaturmesser
  • Option Torsteuerung
  • Option Lichtsteuerung
  • Option Wasserverteilung
    ...

Es soll ein übergeordnetes Status-Form im Hauptprogramm durch Tastendruck geöffnet werden. Dieses soll nun eine 'broadcast ähnliche' Aufforderung schicken, welche alle aktiven Funktionsmodule dazu veranlasst, sich beim Status-Form zu melden, damit dieses dann deren Namen auflisten kann. Sobald sich ein Modul am Status-Form angemeldet hat soll das Status-Form auf ein Event des jeweiligen Modules hören, in welchem Messdaten übertragen werden. Die Anmeldung am Status-Form kann aber nicht bei Programmstart erfolgen, da dieses zu dem Zeitpunkt nicht läuft. Das Status-Form muss also zur Anmeldung aufrufen.

16.832 Beiträge seit 2008
vor 3 Jahren

Jo, und dafür gibts Messaging.
Links siehe oben.