Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie werden mehrere Forms über Veränderungen benachrichtigt?
chrisrabe
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

Wie werden mehrere Forms über Veränderungen benachrichtigt?

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
JimStark
myCSharp.de - Member

Avatar #dOpLzh7hN1az1g0eGRc0.jpg


Dabei seit:
Beiträge: 247

beantworten | zitieren | melden

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.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von JimStark am .
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10074

beantworten | zitieren | melden

Dazu benutzt man entweder Events oder eines der vielen MessageFrameworks wie z.b. TineMessanger.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15807
Herkunft: BW

beantworten | zitieren | melden

Als Teil des Ökosystems gibts dazu .NET Reactive bzw. ReactiveUI
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4026

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #gvp27cjXxMEZQuCpk4WQ.jpg


Dabei seit:
Beiträge: 3745
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1834
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

[offtopic]
@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
[/offtopic]
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.

Moderationshinweis von Abt (19.12.2020 - 18:31:20):

Inhalt als Offtopic markiert.

private Nachricht | Beiträge des Benutzers
chrisrabe
myCSharp.de - Member



Dabei seit:
Beiträge: 22

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15807
Herkunft: BW

beantworten | zitieren | melden

Jo, und dafür gibts Messaging.
Links siehe oben.
private Nachricht | Beiträge des Benutzers